我有一个十六进制值的文本文件,在我fscanf一个值后,我需要知道如何将它从十六进制字符串转换为int。然后将其转换回十六进制字符串以便以后打印。有谁知道这个算法?谢谢。
答案 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)
使用%x
和fscanf
字符串中的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
。