类型转换的奇怪结果
Strange result with type 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值集。我期待同样的结果在"计数"声明。但它打印的是"SAUR",与我提供的完全相反。请给我解释一下输出。
这被称为little-endianness——大多数处理器架构以最低有效字节优先存储整数值。顺便说一下,string
构造函数必须接收一个以null结尾的字符数组(所以int旁边的字节碰巧包含零纯粹是运气)。
问题是端序 -在您的机器上,数字是以反向顺序0x53415552
的字节存储的。
还可以将整数变量的地址传递给std::string
构造函数-这是未定义的行为,因为该变量构成了一个字节块,而std::string
构造函数只接受以空结尾的字符串。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++中的双指针类型转换
- 逐位操作的隐式类型转换
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 模板中的类型转换
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 在 C++(和 C)中进行类型转换时明显不一致
- 字符类型转换不兼容
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- C++:用户定义的显式类型转换函数错误
- 将类指针类型转换为键时出错
- 为什么隐式类型转换在此代码中结果不正确
- 我想复制 (wchar_t *) 缓冲区中的数据,但我无法这样做 bcz 还有其他不兼容的类型,类型转换但没有得到结果
- 函子参数和结果的任意类型转换
- pow()在使用类型转换时会产生意外结果
- Auto it = vector.begin()结果类型不能转换为const_iterator
- 类型转换的奇怪结果
- 显式类型转换 float(intvar) 结果为 int
- 当我对输出进行类型转换时,有一个有趣的结果