#include <iostream>
using namespace std;
int main(){
int x = 0x414243;
cout.write( (char*)&x, 1);
cout.write( ((char*)&x) + 1, 2);
}
输出为:
CBA
我不明白 (char*)& 对 x 做了什么。
查看这个 ASCII 表 http://www.asciitable.com/ ,在我看来 write() 正在用八进制写 141, 142, 143...相反!
char* 是如何做到这一点的?
最佳答案
大写字母'C'
、'B'
和'A'
的ASCII码分别是67、66和65,即0x43、0x42 和 0x41。
您的计算机似乎是 32 位 little-endian ,因此 0x00414243
的八位字节(为了清楚起见,额外加了两个零,以完成 32 位 int
),如下所示放置在内存中:
0x43, 0x42, 0x41, 0x00
这表示一个以 null 结尾的字符串“CBA”
。
请注意,在大端硬件上,八位字节将以相反的顺序放置,即
0x00, 0x41, 0x42, 0x43
因此将此数字解释为以 null 结尾的字符串将产生空输出。
关于c++ - char* 如何以十六进制读取这个整数?它在 ostream::write() 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44502685/