为什么这段代码不起作用?
#include <iostream>
#include <cstdio>
int main() {
printf("%X", 1327644190303473294);
}
我得到了o / p 5f264e8e
但预期o / p为126cbd5b5f264e8e
,如下面的PHP脚本
<?php
echo dechex(1327644190303473294);
?>
答案 0 :(得分:5)
格式'%X'期望类型'unsigned int',但参数2的类型为'long int'
#include <stdio.h>
int main(void) {
printf("%lX",1327644190303473294);
return 0;
}
输出
126CBD5B5F264E8E
答案 1 :(得分:3)
可行的方法是
#include <inttypes.h>
要做:
#include <stdio.h>
#include <inttypes.h> // for PRIX64 macro (and INT64_C macro from stdint.h)
int main(void)
{
printf("The value is %"PRIX64"\n", INT64_C(1327644190303473294));
return 0;
}
答案 2 :(得分:2)
%X
适用于int
,通常为32位。 64位数字所需的咒语取决于平台。在Mac上,它是%qX
。
答案 3 :(得分:1)
您需要使用不同的格式说明符来指示您的整数是64位宽。就目前而言,您的代码将输入解释为32位整数。
在MSVC中,这将是%I64x
,在某些平台上它将是%lx
,并且确实存在其他说明符。
总之,您需要选择适合您特定工具集的说明符。
答案 4 :(得分:0)
对于uint64_t,您可以尝试如下:
uint64_t val = 1327644190303473294;
printf("val: 0x%llx\n", val);