求unsigned long 与 BYTE 的转化问题

yanyan3fish 2010-01-23 06:32:40
我有unsigned long类型数据如:0x12345678
我想把它转化成4个BYTE型数据:0x12,0x34,0x56,0x78
不知道如何转化,请高手指点
...全文
329 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tyzqqq 2011-03-24
  • 打赏
  • 举报
回复
yanyan3fish 2010-01-24
  • 打赏
  • 举报
回复
谢谢大家!结贴喽!
MXueJia 2010-01-24
  • 打赏
  • 举报
回复
unsigned long n = 0x12345678;
unsigned char b[4];

b[0]=n>>24;
b[1]=(n>>16)&255;
b[2]=(n>>8)&255;
b[3]=n&255;
mstlq 2010-01-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pgplay 的回复:]
引用 4 楼 hairetz 的回复:
位移操作即可,只需要注意大小端问题。

大小端对位移操作有影响吗?不是左移消高位,右移消低位吗?
[/Quote]

大小端对位移操作没影响,不过memcpy的时候需要注意
SEOptimization 2010-01-23
  • 打赏
  • 举报
回复
union Entry
{
unsigned long value;
BYTE bytes[4];
};

Entry e;
e.value = 0x12345678;
耍宝王 2010-01-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hairetz 的回复:]
位移操作即可,只需要注意大小端问题。
[/Quote]
大小端对位移操作有影响吗?不是左移消高位,右移消低位吗?
cattycat 2010-01-23
  • 打赏
  • 举报
回复
如果不想关注大端小端问题,就用移位操作吧。
  • 打赏
  • 举报
回复
[Quote=引用楼主 yanyan3fish 的回复:]
我有unsigned long类型数据如:0x12345678
我想把它转化成4个BYTE型数据:0x12,0x34,0x56,0x78
不知道如何转化,请高手指点
[/Quote]

位移操作即可,只需要注意大小端问题。
xylicon 2010-01-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arong1234 的回复:]
(BYTE)0x12345678 得到0x12
(BYTE)(0x12345678 >>8)得到0x34
依次类推

[/Quote]

这个要看它的字节存放顺序是大端还是小端了。像一般的机器是小端的,即 (BYTE)0x12345678 得到的是0x78
traceless 2010-01-23
  • 打赏
  • 举报
回复
方法太多了。。。

unsigned long n = 0x12345678;
BYTE *pData = new BYTE[4];
PBYTE pTemp = (PBYTE)&n;
for (int i = 0; i < 4; i++)
{
pData[i] = *(pTemp+i);
printf("%#x\t", pData[i]);
}


arong1234 2010-01-23
  • 打赏
  • 举报
回复
(BYTE)0x12345678 得到0x12
(BYTE)(0x12345678 >>8)得到0x34
依次类推

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧