关于 reinterpret_cast 的 c 编程问题
c programming question on reinterpret_cast
(char) 的 reinterpret_cast 在这里做什么?
unsigned int aNumber = 258; // 4 bytes in allocated memory [02][01][00][00]
printf("\n is printing out the first byte %02i",(char)aNumber); // Outputs the first byte[02]
为什么我没有指向它就输出了第一个字节?例如 (char*)&aNumber
%02i 是这样做的吗 = (char)*&aNumber
或者 (char) 的 reinterpret_cast 是否切掉了剩余的 3 个字节,因为它是一个 char,它只分配了其中的一个字节 4 个字节?
首先,reinterpret_cast
是一个C++运算符。你展示的不是那个,而是 C 风格的转换。
转换正在将类型 unsigned int
的值转换为类型 char
的值。超出范围的值的转换是实现定义的,但在您可能遇到的大多数实现中,这是通过将低位字节重新解释为转换值来实现的。
在这种特殊情况下,aNumber
的低位字节的值为 0x02,因此这就是转换为 char
.
时的结果
(char) 的 reinterpret_cast 在这里做什么?
unsigned int aNumber = 258; // 4 bytes in allocated memory [02][01][00][00]
printf("\n is printing out the first byte %02i",(char)aNumber); // Outputs the first byte[02]
为什么我没有指向它就输出了第一个字节?例如 (char*)&aNumber
%02i 是这样做的吗 = (char)*&aNumber
或者 (char) 的 reinterpret_cast 是否切掉了剩余的 3 个字节,因为它是一个 char,它只分配了其中的一个字节 4 个字节?
首先,reinterpret_cast
是一个C++运算符。你展示的不是那个,而是 C 风格的转换。
转换正在将类型 unsigned int
的值转换为类型 char
的值。超出范围的值的转换是实现定义的,但在您可能遇到的大多数实现中,这是通过将低位字节重新解释为转换值来实现的。
在这种特殊情况下,aNumber
的低位字节的值为 0x02,因此这就是转换为 char
.