在 C 中将十六进制数打印为十进制数

问题描述 投票:0回答:4

我正在尝试在 C 中将十六进制数字打印为十进制。

int main()
{
    unsigned long hex = 0xb5389e0c721a;
    printf("hex in dec: %lu", hex);
    getch();
    return 0;
}

由此,我的输出是 2651615770。但是,当我使用在线十六进制到十进制转换器和 Windows 计算器时,假定的输出应该是 199254774411802。我做错了什么?

c hex printf decimal
4个回答
2
投票

我认为你的

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

1
投票

我做错了什么?

您使用的是

unsigned long
类型,该类型仅保证为 32 位宽,并且可能无法包含值
0xb5389e0c721a
。使用
unsigned long long
代替,保证至少 64 位宽,并使用
%llu
打印。

对于给定的编译平台,

unsigned long
可以包含的最大值是固定的。它位于系统标题
ULONG_MAX
的宏
limits.h
中。您还可以为编译器打印它的值,而无需将
limits.h
与语句
printf("%lu", (unsigned long)-1);
一起包含。


0
投票

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

0
投票

int main() {

    unsigned long long hex = 0xb5389e0c721a;
    printf("0x%llx in dec %ld\n", hex, hex);

}

© www.soinside.com 2019 - 2024. All rights reserved.