类型转换的奇怪结果

时间:2011-07-18 10:38:12

标签: 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字节“const char”字符串。我使用的整数值只是字符串“RUAS”的ascii值的集合。我期待在“cout”声明中得到相同的结果。但它打印“SAUR”,这与我提供的完全相反。 请解释我的输出。

2 个答案:

答案 0 :(得分:7)

它被称为little-endianness - 大多数处理器体系结构存储整数值,其中最低有效字节为。顺便说一句,string构造函数必须接收一个以null结尾的字符数组(所以很幸运,你的int旁边的字节恰好包含零)。

答案 1 :(得分:5)

问题是 endianness - 在您的机器上存储的数字包含以相反顺序0x53415552存储的字节。

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

相关问题