回答
DWORD x1 = (0xFF01091A & 0xFF000000) >> 24;
DWORD x2 = (0xFF01091A & 0x00FF0000) >> 16;
DWORD x3 = (0xFF01091A & 0x0000FF00) >> 8;
DWORD x4 = (0xFF01091A & 0x000000FF) >> 0;
直排老派! – 2009-07-24 20:04:48
虽然不会给出正确的结果,它会返回0xFF000000,0x00FF0000,0x0000FF00和0x000000FF。您还需要对值进行位移,所以x1 >> = 24,x2 >> = 16,x3 >> = 8。 – JAB 2009-07-24 20:08:39
您应该按24,16,8和0位移位。 – 2009-07-24 20:09:13
DWORD value;
// casts to `char *` are always ok:
unsigned char * bytes = (unsigned char *)&value;
unsigned char third_byte = bytes[2];
请记住,这将得到字节它们被放置在内存:在小端机bytes[0]
将举行至少显著字节,在大端机器,它会保持最重要的一个。
如果您想按字节获取字节,请按照Efraim's answer中的建议使用移位。
AraK的方式有效。你可以做的另一种方式是:
char x1 = *(((char*)&Val) + 0);
char x2 = *(((char*)&Val) + 1);
char x3 = *(((char*)&Val) + 2);
char x4 = *(((char*)&Val) + 3);
当心不过,这种方式将是机器的字节序敏感。
不是真的它更像是:
uint8_t Byte1 = (Val>> 0) & 0xFF;
uint8_t Byte2 = (Val>> 8) & 0xFF;
uint8_t Byte3 = (Val>>16) & 0xFF;
uint8_t Byte4 = (Val>>24) & 0xFF;
面具和转移(如在以前的答案建议)的作品;一个有些棘手的选择是“指针类型双关”,即
xlowbyte = (unsigned char*)(&Val) [0]; /* LSB, 0x1A */
xmidlowb = (unsigned char*)(&Val) [1]; /* 2nd-LSB, 0x09 */
等 - 假设你是一个小端机(如果你使用的是Windows这是有可能的)上。
使用工会:
union Bytes {
char c[4];
unsigned int n;
};
int main() {
Bytes b;
b.n = 0xFF01091A;
char c = b.c[2];
}
编辑:对不起,这是C++代码。我太累了,不能将它转换成C并测试它,但你明白了吗?
- 1. C# - 位解析8个字节数组
- 2. C#解析字节结构顺序
- 3. 将字节串解析为C结构
- 4. C++解析数据字节到结构
- 5. 的Java字节解析
- 6. h.264字节流解析
- 7. Java unicode字节解析
- 8. 视频节点的解析失败
- 9. 从字符串解析字节码?
- 10. C:解开一个字节
- 11. Python解释字节。 (C memcpy)
- 12. 将字节字符串解析为本地斯卡拉字节
- 13. C#解析Xml选择节点
- 14. 解析C++字符串
- 15. 解析字符串C#
- 16. 解析字符串到C++
- 17. C#解析JSON字符串
- 18. Visual C++字符串解析
- 19. 字符串解析在C#
- 20. 解析字符串C
- 21. C#字符串解析
- 22. OBJ-C解析字符串
- 23. C字符串解析
- 24. 解析C#字符串HH:MM:SS
- 25. C++的字符串解析
- 26. C++字符串解析
- 27. 解析字符串C#
- 28. C#解析字符串
- 29. C++解析,从字符串
- 30. c#解析字体错误
要小心这种事情,确保你明白字节来自哪里,如果有代码可能移动到非Windows平台的字节顺序可能不同(从大到小排列处理器)。 – Tom 2009-07-24 20:11:16