шестнадцатеричная строка для преобразования int в C - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть текстовый файл с шестнадцатеричными значениями, после того как я fscanf значение, мне нужно знать, как я могу преобразовать его из шестнадцатеричной строки в int.А затем преобразовать его обратно в шестнадцатеричную строку для последующей печати.Кто-нибудь знает алгоритм для этого?спасибо.

Ответы [ 3 ]

4 голосов
/ 08 сентября 2011

Вы должны использовать спецификатор формата %x вместо %s для чтения ваших значений.Это будет читать данные как шестнадцатеричные целые числа.

Например, если ваш файл выглядит так:

ff3c 5a cb2d

Тогда вы можете прочитатьэти 3 значения, как это:

int a, b, c;
fscanf(fp, "%x %x %x", &a, &b, &c); // a = 0xff3c, b = 0x5a, c = 0xcb2d
3 голосов
/ 08 сентября 2011

Используйте спецификатор формата %x в строках fscanf и fprintf.

2 голосов
/ 08 сентября 2011

Как сказал Марлон выше:

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.

...