用C将十六进制数字打印为十进制



我正在尝试用c打印十六进制十进制数。

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

由此,我的输出是2651615770。然而,当我使用在线十六进制到dec转换器和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可以包含的最大值是固定的。它在系统头文件limits.h的宏ULONG_MAX中。您还可以为编译器打印它的值,而不必在语句printf("%lu", (unsigned long)-1);中包含limits.h

0xb5389e0c721a已超过unsigned long的上限。使用'unsigned long long'类型,并使用"%llx"格式字符串打印值:

#include <stdio.h>
int main()
   {
   unsigned long long hex = 0xb5389e0c721a;
   printf("hex in dec: %llxn", hex);
   return 0;
   }

最新更新