gpt4 book ai didi

c - 打印 char 数组 [] 的十六进制表示

转载 作者:太空狗 更新时间:2023-10-29 16:43:21 27 4
gpt4 key购买 nike

我有一个 8 字节的数组,我正在尝试打印出它的十六进制表示法。使用 printf("%x", array) 我可以获取第一个字节并将其打印出来,但我得到的是 "0xffffff9b" 或类似的东西。有没有办法获得没有“f”的符号?

我想打印出每个元素,看起来像这样:

0x9a、0x43、0x0D

最佳答案

这个:

printf("%x", array);

很可能会以十六进制打印数组第一个元素的地址。我说“最有可能”是因为尝试将地址打印成 unsigned int 的行为是未定义的。如果你真的想打印地址,正确的做法是:

printf("%p", (void*)array);

(在大多数情况下,数组表达式被隐式转换为(“衰减”为)指向数组第一个元素的指针。)

如果你想打印数组的每个元素,你必须明确地这样做。 "%s" 格式采用指向字符串第一个字符的指针,并告诉 printf 遍历字符串,打印每个字符。没有以十六进制执行此类操作的格式,因此您必须自己执行。

例如,给定:

unsigned char arr[8];

你可以像这样打印元素 5:

printf("0x%x", arr[5]);

或者,如果你想要一个前导零:

printf("0x%02x", arr[5]);

"%x" 格式需要一个 unsigned int 参数,而您传递的 unsigned char 值是隐式的 提升unsigned int,所以这是类型正确的。您可以使用 "%x" 以小写形式打印 af 的十六进制数字,"%X" 对于大写字母(您在示例中同时使用了两者)。

(请注意,如果字节为 8 位,则 "0x%02x" 格式效果最佳;这不能保证,但几乎可以肯定在您可能使用的任何系统上都是这种情况。)

我将留给您编写适当的循环并决定如何分隔输出。

关于c - 打印 char 数组 [] 的十六进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10375932/

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