我正在尝试在 C 中将十六进制数字打印为十进制。
int main()
{
unsigned long hex = 0xb5389e0c721a;
printf("hex in dec: %lu", hex);
getch();
return 0;
}
由此,我的输出是 2651615770。但是,当我使用在线十六进制到十进制转换器和 Windows 计算器时,假定的输出应该是 199254774411802。我做错了什么?
我认为你的
2651615770
输出是由于溢出造成的。因为32位unsigned long hex
无法容纳这么大的数字(0xb5389e0c721a
),所以需要更大的数据类型。
尝试以下更改-
int main()
{
unsigned long long hex = 0xb5389e0c721a; // declare hex as unsigned long long
printf("hex in dec: %llu", hex);
getch();
return 0;
}
我做错了什么?
您使用的是
unsigned long
类型,该类型仅保证为 32 位宽,并且可能无法包含值 0xb5389e0c721a
。使用 unsigned long long
代替,保证至少 64 位宽,并使用 %llu
打印。
对于给定的编译平台,
unsigned long
可以包含的最大值是固定的。它位于系统标题 ULONG_MAX
的宏 limits.h
中。您还可以为编译器打印它的值,而无需将 limits.h
与语句 printf("%lu", (unsigned long)-1);
一起包含。
值
0xb5389e0c721a
超出了unsigned long
的限制。 请改用“unsigned long long”类型,并使用格式字符串 "%llx"
: 打印该值
#include <stdio.h>
int main()
{
unsigned long long hex = 0xb5389e0c721a;
printf("hex in dec: %llx\n", hex);
return 0;
}
int main() {
unsigned long long hex = 0xb5389e0c721a;
printf("0x%llx in dec %ld\n", hex, hex);
}