有一些代码将数据写入内存。
假设给了他一个指向内存块开头的指针 - void *, - 和一个要写入的数值 - data。指针转换为类型int,并写入差异data - val。
void write(void *addr, int data = 1024) {
*((int*) addr) = data - 18;
}
为了检查程序的正确运行,我将内存块的每个字节复制到一个文件中,然后研究它。
for (std::size_t i = 0; i < size; i++)
fout << std::hex << ((int) *((char*) addr + i));
特殊之处在于,例如,1024 - 18文件中表达式的结果如下所示:ffffffee, 3, 0, 0,但它应该:ee, 3, 0, 0。
为什么会出现这种怪异现象?一个字节怎么能存储这么大的数字呢?
您将一个字节转换为
int:因此,
cout输出type 的有符号值,int从ee. 您有值 238,它是 - 在有符号字节表示中 - 负数(符号位为 1)。这是在转换为 时传播的符号位int。尝试
无需转换为 int,转换为 unsigned char