gpt4 book ai didi

c - 十六进制值作为字符串 C

转载 作者:行者123 更新时间:2023-11-30 14:59:21 25 4
gpt4 key购买 nike

我正在为我的大学写一篇论文,但遇到了一些困惑。

int main(void) {
unsigned int i = 0x00646c72;
printf("H%x Wo%s\n", 57616, (char *) &i);
}

基本上在一个小端结构中打印出来:He110 World

我必须告诉如果这段代码由 Big Endian 架构执行,它会打印什么。

到目前为止我所知道的:

“H”、空格、“W”和“o”将保留在原来的位置,因为它们是 8 位表示形式的字符串文字。

数值 57616 以 16 为基数表示为 e110。据我所知,这应该以小端存储为 10e1,但它仍然打印为“e110”,也许这与 %x 格式化程序的工作原理有关?

0x00646c72 转换为 ASCII 为“dlr”,因此在小端字节序中它读取“rld”,但在大端字节序中它会打印“dlr”。这个假设正确吗?

最后一个非常相关的问题:

#define VGABUF ((void *) 0xb8000)

void begin(void) {
int *vga = VGABUF;
*vga = 0x2f4b2f4f;

while (1)
continue;
}

我被要求修改此代码(显示绿色背景的 OK 标志),使其在 Big Endian 架构中的行为完全相同。我想我应该将 vga 写为字符串文字,但是当我尝试它时,它没有打印任何内容。

最佳答案

The value 57616 in base 16 is e110. This in my knowledge should be stored in little endian as 10e1, but still it's printed as 'e110', maybe it has to do with how the %x formatter works?

正确,它的打印方式与字节序无关,这在大字节序机器上不会改变。

0x00646c72 translates to ASCII as 'dlr' so in little endian it reads 'rld' but in Big Endian it would print 'dlr'. Are this asumptions correct?

你忘记了开头的0x00。转换为 (char *) 这是“rld”+ 终止 0。如果你有big endian,你会得到0, 0x64, 0x6c, 0x72,终止的0将是第一个字符,打印的字符串将为空

所以结果将是“he110 wo\n”

关于c - 十六进制值作为字符串 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42824148/

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