C++ 类型转换的奇怪结果

C++ 类型转换的奇怪结果,c++,pointers,casting,C++,Pointers,Casting,在以下程序中: int main(){ int i = 0x52554153; const char *s = reinterpret_cast<const char*>(&i); std::string *s1 = new std::string(s); std::cout<<"word is "<<*s1<<std::endl; return 0; } 我正在将4字节int转换为4字节cons

在以下程序中:

int main(){

    int i = 0x52554153;
    const char *s = reinterpret_cast<const char*>(&i);
    std::string *s1 = new std::string(s);
    std::cout<<"word is "<<*s1<<std::endl;
    return 0;
}
我正在将4字节int转换为4字节const char字符串。我使用的整数值只是字符串RUA的一组ascii值。我期待在cout语句中得到同样的结果。但它印的是SAUR,和我提供的完全相反。 请给我解释一下输出

问题是endianness-在您的计算机上,数字与字节的存储顺序相反0x53415552

此外,还可以将整型变量的地址传递给std::string构造函数-这是未定义的行为,因为该变量构成了一个字节块,并且std::string构造函数只接受以null结尾的字符串。

问题在于endianness-在您的计算机上,数字与以相反方式存储的字节一起存储订单号0x53415552


此外,还可以将整数变量的地址传递给std::string构造函数-这是未定义的行为,因为该变量构成了一个非空终止的字节块,并且std::string构造函数只接受空终止的字符串。

这被称为-大多数处理器体系结构存储的整数值的有效性最低字节优先。顺便说一下,字符串构造函数必须接收一个以null结尾的字符数组,因此int旁边的字节恰好包含零是非常幸运的。

这就是所谓的-大多数处理器体系结构首先存储具有最低有效字节的整数值。顺便说一句,字符串构造函数必须接收一个以null结尾的字符数组,因此int旁边的字节恰好包含零是非常幸运的。

处理器的字节顺序是Little Endian。更多信息:处理器的字节顺序是Little Endian。更多信息: