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