为什么该函数以相反的顺序显示十六进制代码

Why is the function displaying the hex code in reverse order?

本文关键字:顺序 显示 十六进制 代码 函数 为什么      更新时间:2023-10-16

以下代码(以C++为单位(应该获取一些数据及其大小(以字节为单位(并返回包含十六进制代码的字符串。 size是存储在val中存储位置的内存块的大小。

std::string byteToHexString(const unsigned char* val, unsigned long long size)
{
    unsigned char temp;
    std::string vf;
    vf.resize(2 * size+1);
    for(unsigned long long i= 0; i < size; i++)
    {
        temp = val[i] / 16;
        vf[2*i] = (temp <= 9)? '0' + temp: 'A' + temp - 10; // i.e., (10 = 9  + 1)
        temp = val[i] % 16;
        vf[2*i+1] = (temp <= 9)? '0' + temp: 'A' + temp - 10; // i.e., (10 = 9  + 1)
   }
vf[2*size] = '';
return (vf);
}

以此类推,按以下方式执行上述函数:

int main()
{
     unsigned int a = 5555;
     std::cout << byteToHexString((unsigned char*)(&a), 4);
    return 0; 
}

我们得到的输出是:

B3150000

输出不应该是000015B3吗?那么,为什么以相反的顺序显示呢?代码有问题吗(我在 Ubuntu 中使用 g++ 编译器(?

您看到的是字节在架构上表示整数的存储顺序,这恰好是小端序。 这意味着,最低有效字节排在第一位。

如果要以普通数字形式显示它,则需要检测体系结构的字节序并相应地切换代码,或者仅使用字符串流:

unsigned int a = 5555;
std::ostringstream ss;
ss << std::setfill( '0' ) << std::setw( sizeof(a)*2 ) << std::hex << a;
std::cout << ss.str() << std::endl;