gpt4 book ai didi

c - 无符号长十六进制表示

转载 作者:太空狗 更新时间:2023-10-29 16:59:08 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <string.h>

int main(void) {
char buf[256] = {};
unsigned long i=13835058055298940928;
snprintf(buf, 1024, "%lx", i); /* Line 7 */
printf("%s\n",buf);
return 0;
}

在第 7 行中,如果我使用 %lux,那么 snprintf 不会进行任何转换。它只打印 0x13835058055298940928x,而如果我只使用 %lx,它会打印预期的十六进制转换。

如何用十六进制表示 unsigned long?

最佳答案

"%lux" 的格式被视为 "%lu"(无符号长整数,十进制)后跟字母 x

"%x" 格式需要一个无符号类型的参数;没有(直接)机制以十六进制格式打印带符号的整数。

以十六进制打印 unsigned long 值的格式是 "%lx"。 (x 是十六进制,d 是有符号十进制,u 是无符号十进制;它们中的任何一个都可以用 l 很长一段时间。)

请注意,值 13835058055298940928 至少需要 64 位无符号类型才能存储它而不会溢出。 unsigned long 类型至少为 32 位;它在一些 系统上是 64 位的,但绝不是全部。如果您希望您的代码可移植,您应该使用类型 unsigned long long 而不是 unsigned long。以十六进制打印 unsigned long long 值的格式是 "%llx"

为了清楚起见,我通常在十六进制输出前加上 0x,因此对于读者来说很明显这是一个十六进制数:

printf("0x%llx\n", some_unsigned_long_long_value);

(你可以使用%#llx获得相同的结果,但我发现写出0x比记住#<的含义更容易 标志。)

关于c - 无符号长十六进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19478509/

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