[英]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.