Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么函数以相反的顺序显示十六进制代码?_C++_Endianness - Fatal编程技术网

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

C++ 为什么函数以相反的顺序显示十六进制代码?,c++,endianness,C++,Endianness,下面的代码(在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

下面的代码(在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] = '\0';
return (vf);
}

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

您看到了在您的体系结构中用于表示整数的字节的存储顺序,这恰好是little endian。这意味着,最低有效字节排在第一位

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

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;
无符号整数a=5555;
std::ostringstream ss;

ss这个架构是特定于平台还是特定于编译器?对不起,这个愚蠢的问题…它是特定于架构的。现在大多数通用计算机都是小端机。请注意,编译器知道目标是什么体系结构,因此可以在编译时进行endianness检查。
B3150000
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;