无符号长hex表示

#include  #include  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 ,则打印预期的hex转换。

如何用hex表示无符号长整数?

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

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

以hex打印unsigned long值的格式为"%lx" 。 ( x是hex, d是带符号的十进制, u是无符号十进制;其中任何一个都可以用l来限定。)

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

为清楚起见,我通常在hex输出前面加上0x ,因此读者很明显它是一个hex数:

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

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