获取int的各字节值

Posted by Pacras on November 17, 2020

        最近在工作中遇到了一个问题:C++的** int类型有4个字节,现在需要获取其各个字节的值,不要求各字节的值是十六进制的,十进制也可以。例如,对于 int num = 65;,将num转为十六进制后为0x 00 00 00 41**,即其四个字节的值分别为0,0,0,与65。

        比较直观的思路是调函数将十进制转为十六进制,示例代码如下:

#include <sstream>

#include <iomanip>


int num = 65;
std::stringstream ss;
ss << std::setfill('0') << std::setw(8) << std::hex << num;
std::string hex_str ss.str();

       这样可以得到原数字的十六进制字符串,再遍历字符串每次取出两位并根据ASCII码做计算,如下所示:

int i = 0, temp = 0;
while (i < hex_str.size())
{
    if (hex_str[i] < 'A')
        temp = (hex_str[i] - '0') * 16;
    else
        temp = (hex_str[i] - 'A' + 10) * 16;
    i++;
    if (hex_str[i] < 'A')
        temp += hex_str[i] - '0';
    else
        temp += hex_str[i] - 'A' + 10;
    i++;
    // temp 即为其中一个字节的结果
}

       Emmmmmm写完感觉代码很丑,请教了下前辈,得到如下代码:

for (int i = 3; i >=0; i--)
{
    temp = (num >> 8 * i) & 0xff;
}

       位运算🐂🍺