gpt4 book ai didi

C 打印十六进制

转载 作者:太空宇宙 更新时间:2023-11-04 08:50:36 25 4
gpt4 key购买 nike

好的,所以我正在尝试打印结构的十六进制值。现在我的打印函数执行以下操作:

int len = sizeof(someStruct);
unsigned char *buffer = (unsigned char*)&someStruct;
int count;
for(count = 0; count < len; count++) {
fprintf(stderr, "%02x ", buffer[count]);
}
fprintf(stderr, "\n");

结构定义如下:

struct someStruct {
unsigned char a;
short myShort;
} __attribute__((packed)) someStruct;

按预期打印出的这个结构的长度是(控制台输出):

sizeof(someStruct): 3 bytes

这里的问题是我遇到的以下问题。我设置了一个值。

someStruct.myShort = 0x08;

现在这个短片有 2 个字节长。然而,当它被打印到控制台时,它并没有显示最重要的 0x00。这是我得到的输出,

stderr: 00 08

不过我想要以下输出(3 个字节长),

stderr: 00 00 08 

如果我用 0xFFFF 填充 short,那么我会得到 2 字节的输出,但是,只要有前导 0x00,它就不会将前导 0x00 输出到控制台。

关于我做错了什么的任何想法。可能是我忽略的一些小东西。

最佳答案

在您提供更多信息后,您的代码对我来说没问题。它打印输出:

00 08 00

第一个 00 来自 unsigned char a;,第二个字节 08 00 来自 short。由于平台相关的数据存储在内存中,它们被切换。

如果你想要短的交换字节,你可以只显示一个short:

fprintf(stderr, "%02x %02x", (someStruct.myShort >> 8) & 0xFF, someStruct.myShort & 0xFF)

关于C 打印十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19797181/

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