我有一个 8 字节的数组,我正在尝试打印它的十六进制表示法。使用printf("%x", array)
我可以得到第一个字节并将其打印出来,但我得到了"0xffffff9b"
或类似的东西。有没有办法获得没有“f”的符号?
我想打印出每个元素,如下所示:
0x9a, 0x43, 0x0D
, etc.
This:
printf("%x", array);
很可能会打印address数组第一个元素的十六进制形式。我说“最有可能”是因为尝试打印地址的行为就好像它是一个地址一样unsigned int
未定义。如果您确实想打印地址,正确的方法是:
printf("%p", (void*)array);
(在大多数情况下,数组表达式会隐式转换为(“衰减”为)指向数组第一个元素的指针。)
如果你想打印数组的每个元素,你必须明确地这样做。这"%s"
format 接受一个指向字符串第一个字符的指针并告诉printf
迭代字符串,打印每个字符。没有任何格式可以以十六进制执行此类操作,因此您必须自己执行此操作。
例如,给定:
unsigned char arr[8];
你可以像这样打印元素 5:
printf("0x%x", arr[5]);
或者,如果你想要一个前导零:
printf("0x%02x", arr[5]);
The "%x"
格式需要一个unsigned int
论证,以及unsigned char
您传递的值是隐式的promoted to unsigned int
,所以这是类型正确的。您可以使用"%x"
打印十六进制数字a
throughf
小写,"%X"
为大写(您在示例中使用了两者)。
(请注意,"0x%02x"
如果字节为 8 位,格式效果最佳;这并不能保证,但在您可能使用的任何系统上几乎肯定会出现这种情况。)
我将让您编写适当的循环并决定如何界定输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)