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

How does char* read this integer in hexadecimal? How is it working in ostream::write()?

本文关键字:ostream write 工作 何工作 它在 读取 何读取 十六进制 char 整数      更新时间:2023-10-16
#include <iostream>
using namespace std;
int main(){
    int x = 0x414243;
    cout.write( (char*)&x, 1);
    cout.write( ((char*)&x) + 1, 2);
}

输出为:

中央广播电视总会

我不明白(char*(和正在用x做什么。

http://www.asciitable.com/看这个 ASCII 表,在我看来 write(( 正在用八进制写 141、142、143......反过来!

char* 是如何做到这一点的?

'C''B''A'的ASCII代码是67、66和65,即0x43、0x42和0x41。

看起来您的计算机是 32 位小端序,因此 0x00414243 的八位字节(为了清楚起见,为了清楚起见,两个额外的零,以完成 32 位int(放置在内存中,如下所示:

0x43, 0x42, 0x41, 0x00

这表示以 null 结尾的字符串"CBA"

请注意,在大端硬件上,八位字节将按相反的顺序放置,即

0x00, 0x41, 0x42, 0x43

因此,将此数字解释为以 null 结尾的字符串将产生空输出。

平台上的整数类型很可能不止一个字节或char

由于它的长度超过一char,因此可以先使用最低有效字节(也称为小端序(或最高有效字节优先(大端序(进行排序。

表达式 (char *) x 是指向整数的第一个字符的指针。

因此,它可以是0x00或0x43,具体取决于平台的字节顺序(假设x长度为 4 个字节(。