gpt4 book ai didi

c++ - char* 如何以十六进制读取这个整数?它在 ostream::write() 中是如何工作的?

转载 作者:搜寻专家 更新时间:2023-10-31 00:54:42 24 4
gpt4 key购买 nike

#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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com