c中int64的十进制到hex

为什么这段代码不起作用?

#include  #include  int main() { printf("%X", 1327644190303473294); } 

我得到了o / p 5f264e8e

但是预期的o / p是126cbd5b5f264e8e ,由下面的PHP脚本给出

  

可行的方法是

 #include  

并做:

 #include  #include  // for PRIX64 macro (and INT64_C macro from stdint.h) int main(void) { printf("The value is %"PRIX64"\n", INT64_C(1327644190303473294)); return 0; } 

格式’%X’期望类型’unsigned int’,但参数2的类型为’long int’

 #include  int main(void) { printf("%lX",1327644190303473294); return 0; } 

输出

 126CBD5B5F264E8E 

%X用于int ,通常为32位。 64位数字所需的咒语与平台有关。 在Mac上,它是%qX

您需要使用不同的格式说明符来指示您的整数是64位宽。 就目前而言,您的代码将输入解释为32位整数。

在MSVC中,这将是%I64x ,在某些平台上它将是%lx并且确实存在其他说明符。

总之,您需要选择适合您的特定工具集的说明符。

对于uint64_t,您可以尝试如下:

 uint64_t val = 1327644190303473294; printf("val: 0x%llx\n", val);