[英]Portable method to extract uint8_t bytes from uint32_t values in c
我正在使用uint32_t值并将其提取为四个uint8_t值。 我的代码适用于gcc 4.9,但我不知道它的可移植性。
这有效:
uint32_t u32 = 0xdeadbeef;
uint8_t byte3 = (uint8_t)(u32 >> 24); // 0xde
uint8_t byte2 = (uint8_t)(u32 >> 16); // 0xad
uint8_t byte1 = (uint8_t)(u32 >> 8); // 0xbe
uint8_t byte0 = (uint8_t)u32; // 0xef
这符合标准吗? 或者我应该这样更明确:
uint32_t u32 = 0xdeadbeef;
uint8_t byte3 = (uint8_t)((u32 & 0xFF000000) >> 24);
uint8_t byte2 = (uint8_t)((u32 & 0x00FF0000) >> 16);
uint8_t byte1 = (uint8_t)((u32 & 0x0000FF00) >> 8);
uint8_t byte0 = (uint8_t)(u32 & 0x000000FF);
我正在使用强制转换使使用-Wconversion开关编译时收到的转换警告静音。
您的第一个选择是完全可以的! 无需清除不需要的位。
较低的不需要的位将通过右移>>
操作删除,较高的不需要的位将通过强制转换(uint8_t)
删除。
既可以工作,又可以合规。
无掩码uint8_t byte0 = (uint8_t)u32;
更干净。
可移植性仅限于支持uint32_t
和uint8_t
。 (当然多数是这样)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.