C中的十六进制字符串到int转换

时间:2011-09-07 20:03:29

标签: c string int hex

我有一个十六进制值的文本文件,在我fscanf一个值后,我需要知道如何将它从十六进制字符串转换为int。然后将其转换回十六进制字符串以便以后打印。有谁知道这个算法?谢谢。

3 个答案:

答案 0 :(得分:4)

您应该使用%x格式说明符而不是%s来读取您的值。这将以十六进制整数读取数据。

例如,如果您的文件如下所示:

  

ff3c 5a cb2d

然后你可以读出这三个值:

int a, b, c;
fscanf(fp, "%x %x %x", &a, &b, &c); // a = 0xff3c, b = 0x5a, c = 0xcb2d

答案 1 :(得分:3)

使用%xfscanf字符串中的fprintf格式说明符。

答案 2 :(得分:2)

正如马龙上面所说:

int a, b, c;
fscanf(fp, "%x %x %x", &a, &b, &c);

以十六进制字符串打印

fprintf(fp, "%x %x %x", a, b, c);

我认为您可能会对计算机存储int类型变量的方式感到困惑。它们不存储在基数10中。它们以二进制形式存储,我相信你知道。这意味着将十六进制值分配给int没有什么特别之处。它不会以任何不同的方式存储。使用%x只是表明您希望程序理解您给出的数字是十六进制数(例如,因此它知道将字符串“10”存储为10000(2)而不是1010( 2)。与输出相同。如果变量a具有二进制10000(2)并使用%x打印它,程序就知道输出应该是10。如果你使用%d,它知道输出应该是16