Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C printf整数类型U32_C_Integer_Printf - Fatal编程技术网

C printf整数类型U32

C printf整数类型U32,c,integer,printf,C,Integer,Printf,我有一个十六进制值0x5A80000000B,我正在尝试获取C中的printf语句,以便将其打印到控制台 到目前为止(因为我在C中毫无用处),我能够使用以下语法打印“b”: printf("Hex value%x\n", value); 该值存储在一个整数类型U32中,但在尝试了%llx,%lx的所有不同组合后,我一直收到编译器警告 我猜我把printf语法弄错了,但我似乎找不到正确的%选项,有人能帮我吗 谢谢这不是printf的问题 问题是32位变量不能保存值0x5A80000000B。32

我有一个十六进制值
0x5A80000000B
,我正在尝试获取C中的printf语句,以便将其打印到控制台

到目前为止(因为我在C中毫无用处),我能够使用以下语法打印“b”:

printf("Hex value%x\n", value);
该值存储在一个整数类型U32中,但在尝试了%llx,%lx的所有不同组合后,我一直收到编译器警告

我猜我把printf语法弄错了,但我似乎找不到正确的%选项,有人能帮我吗


谢谢

这不是printf的问题

问题是32位变量不能保存值
0x5A80000000B
。32位只能容纳8个十六进制数字:0x0000000b。因此,输出上的
b

要存储如此大的值,应该使用64位变量

long long value = 0x5a800000000bLL
另请注意末尾的双
L
。它告诉编译器常量也是一个
long

long value = 0x5a800000000bl;
printf("Hex value%lx\n", value);

然后您可以在
printf
格式字符串中使用
%llx

值0x5A80000000B大于32位,因此您必须使用

long value = 0x5a800000000bl;
printf("Hex value%lx\n", value);

请注意,十六进制常量应以
l
结尾。

这些类型有一些预定义的宏:

#include <inttypes.h>
int64_t PRId64. PRIi64
int32_t PRId32, PRIi32
int16_t PRId16, PRIi16
int8_t PRId8, PRIi8

你试过
%ulx
%ullx
吗?哎呀,应该是PRId64。谢谢虽然这个问题是C,在C中使用InType宏没有问题,但是由于C++中的预处理器的工作方式,在这些宏和字符串文字之间包含空格可能是一个好的实践。如果没有任何空间,预处理器将不会应用inttypes宏,因为它会将其标识为使用用户定义的文字。@dbrank0-取决于编译器/环境。要独立于平台,在这种情况下,只需使用
uint64\u t
。当然可以!我太专注于printf了,我忘了检查实际值有多大:)谢谢迪迪埃!