类型转换的奇怪结果

Strange result with type casting

本文关键字:结果 类型转换      更新时间:2023-10-16

在以下程序中:

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"字符串。我使用的整数值只不过是字符串"RUAS"的ascii值集。我期待同样的结果在"计数"声明。但它打印的是"SAUR",与我提供的完全相反。请给我解释一下输出。

这被称为little-endianness——大多数处理器架构以最低有效字节优先存储整数值。顺便说一下,string构造函数必须接收一个以null结尾的字符数组(所以int旁边的字节碰巧包含零纯粹是运气)。

问题是端序 -在您的机器上,数字是以反向顺序0x53415552的字节存储的。

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