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

c中int64的十进制到十六进制,c,C,为什么这个代码不起作用 #include <iostream> #include <cstdio> int main() { printf("%X", 1327644190303473294); } 您需要使用不同的格式说明符来指示您的整数是64位宽的。目前,代码将输入解释为32位整数 在MSVC中,这将是%I64x,在某些平台上,这将是%lx,并且确实存在其他说明符 总之,您需要为特定的工具集选择合适的说明符。%X用于int,通常为32位。64位数字所需的咒语取决

为什么这个代码不起作用

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

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

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


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

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

格式“%X”要求类型为“unsigned int”,但参数2的类型为“long int”


实现这一点的便携式方法是

#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;
}
#包括
#包含//用于PRIX64宏(和stdint.h中的INT64_C宏)
内部主(空)
{
printf(“值为%”PRIX64“\n”,INT64_C(1327644190303473294));
返回0;
}

对于uint64\u t,您可以尝试以下操作:

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

<代码>长< /C>可能不是64位(它不是在Windows上)。<代码>长< /C> >可能不是64位(它不是在Windows上)。<代码> Q>代码>被禁止在OS X 10.7狮上。@ Mats任何平台无关的解决方案?@维韦克:Rudy的答案非常接近平台无关。问题是:为什么你使用C++代码> Prtff < /C>?我写这个作为一个例子。我正在做c字符数组缓冲区的sprint。是的。我同意INT64_C()更好。
INT64_C()
不是C99标准宏。例如,它不在我的
inttypes.h
中(Mac OS X 10.7)。但是,
(int64_t)1327644190303473294也能正常工作,而且是C99标准。从逻辑上讲,我在错误的标题中查找了
INTn_C()
macros@JeremyP:是的,它在stdint.h中,必须包含在inttypes.h中。我还使用Mac OS X 10.7,FWIW。
警告:格式“%llx”要求参数类型为“long unsigned int”,但参数2的类型为“uint64\u t”
#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;
}
uint64_t val = 1327644190303473294;
printf("val: 0x%llx\n", val);