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

标签 c

#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/

相关文章:

c - 警告 : multi-character character constant [-Wmultichar]

c - A从C中的多个位置访问相同的信息

在另一个函数中调用菜单函数

C:通过引用传递字符串?

c++ - 除了使用设计选择之外,是否不允许访问类型不同的数组元素?

C 数组 = 比 memcpy() 更快的数组

PulseEvent() 函数的 C 实现

c - if 和 else 语句在这个小程序中不起作用,请帮忙 :)

c - 在 C 中传递字符串的最佳方式

c - 在 C 中访问结构体中的某些元素