c中int64的十进制到十六进制

时间:2011-08-30 08:12:09

标签: c

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

#include <iostream>
#include <cstdio>
int main() {
  printf("%X", 1327644190303473294);
}

我得到了o / p 5f264e8e

但预期o / p为126cbd5b5f264e8e,如下面的PHP脚本

所示
<?php
  echo dechex(1327644190303473294);
?>

5 个答案:

答案 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);