C:以十六进制方式打印"unsigned long"的正确方法

Som*_*ing 9 c printf

我有一个函数,它获取一个无符号长变量作为参数,我想以十六进制打印它.

这样做的正确方法是什么?

目前,我使用printf"%lx"

void printAddress(unsigned long address) {
    printf("%lx\n", address);
}
Run Code Online (Sandbox Code Playgroud)

我应该为无符号长十六进制寻找printf模式吗?(而不仅仅是上面提到的"长十六进制")

或者printf仅使用位将数字转换为十六进制? - 所以我不应该关心这个标志呢?

unw*_*ind 10

你说得对.

手册页:

o,u,x,X

unsigned int参数转换为无符号八进制(o),无符号十进制(u)或无符号十六进制(x和X)表示法.

因此值x应始终如此unsigned.要使其long大小,请使用:

(ell)以下整数转换对应于long int或unsigned long int参数[...]

所以%lxunsigned long.但是,地址(指针值)应该打印%p并转换为void *.


Him*_*rav 6

我认为以下格式说明符应该可以尝试一下

printf("%#lx\n",address);

  • 关闭,但没有雪茄!使用 `printf("0x%lx\n",address);` 或 `printf("%#lx\n",address);`,但不能同时使用。第一个会将值“0UL”打印为“0x0”,而第二个将仅输出“0”。这个建议会教 OP 一些东西,但与问题无关。 (3认同)