C++:int* / float* 到 char*,为什么使用 reinterpret_cast 得到不同的结果?

C++ : int* / float* to char*, why get different result using reinterpret_cast?

Result : pChar[0] = 'a';

为什么我会得到两个不同的结果?

感谢您的帮助。

你有这个是因为浮点值不使用与整数值相同的编码(使用尾数+指数或类似的编码的 IEEE 编码)

此外,我想你是 运行 小端 CPU,否则你的第一次测试会产生 0(我的意思是 '[=10=]')。

floatint都是(通常)用四个字节表示的数据类型:

b1 b2 b3 b4

但是,这些字节在这两种类型中的解释完全不同 - 如果不这样,则几乎不需要两种类型。

现在,如果您重新解释指向字符指针的指针,结果将仅指向第一个字节,因为这是 char:

的长度
b1 b2 b3 b4
^^
your char* points to here

如前所述,第一个字节对于两种数据类型具有非常不同的含义,这就是 char 的表示形式通常不同的原因。


对你的例子的应用:

float(IEEE754单精度32位)中的数字57用位表示为

01000010 01100100 00000000 00000000

相比之下,32位整数格式的表示是

00000000 00000000 00000000 00111001

这里的数字似乎以 "big-endian" 格式表示,其中最重要的字节(改变 int 值最多的字节)排在第一位。正如@Jean-FrançoisFabre 所提到的,在您的 PC 中它似乎是相反的,但没关系。对于这两种转换,我都使用了 this site.

现在您的 char* 指针分别指向那些 8 位块中的第一个。显然它们是不同的。