Управление шестнадцатеричными числами в C - PullRequest
0 голосов
/ 02 марта 2011

У меня есть код C, во время которого я открываю файл для ввода шестнадцатеричного числа. Затем я хочу добавить полученное число к другой шестнадцатеричной единственной цифре и, наконец, отобразить число в шестнадцатеричном виде. например Я ввожу AC65E1, добавляю к нему E и отображаю AC65EF.

Есть ли способ сделать это, не проходя преобразование в десятичное и добавляя десятичное и затем преобразовывая обратно в шестнадцатеричное? Если нет, каков оптимальный по времени способ сделать это?

РЕДАКТИРОВАТЬ : Я думаю, что мой вопрос неверно истолкован, я хотел знать, могу ли я использовать «+» с Hex? если бы я не мог, то мне пришлось бы использовать change to decimal, чтобы использовать оператор «+». Извините за неправильный набор!

Теперь я читаю данные из файла в char hex_num [10];

Ответы [ 5 ]

3 голосов
/ 02 марта 2011

На самом деле, компьютеры выполняют всю свою работу в двоичном формате, поэтому, если вы не захотите приложить много бессмысленных усилий, чтобы заставить их выполнять арифметику с необработанными шестнадцатеричными цифрами, вам нужно будет проанализировать числа, добавить их и снова вывести результат обратно в виде шестнадцатеричного значения.

unsigned int value1, value2;
fscanf(fp, "%x %x", &value1, &value2)

unsigned int result = value1 + value2;
printf("%x\n", result);
2 голосов
/ 02 марта 2011

Математика на C и других языках не выполняется ни в какой конкретной базе - за исключением самого низкого уровня обработки, где, конечно, они имеют место в двоичном формате.

Я думаю, что ваш вопрос сломан, потому что вы хотитедобавить E к AC65E1 и снова получить .. AC65E1.Предположительно, вы имели в виду AC65EF.

Я предлагаю прочитать данные из файла и проанализировать строки, которые выглядят как числа, в целые числа, выполнить арифметику, а затем снова вывести их в любом представлении, которое вы пожелаете.

Для этого используйте strtol, передав 16 в качестве параметра base, или fscanf, чтобы сначала прочитать целое число.

1 голос
/ 02 марта 2011

Вы можете написать посимвольный сумматор так же, как вы это сделали бы естественным образом на бумаге, то есть сравнить последние цифры '1' + 'E' = 'F', без переноса и т. Д.

Это не может быть значительно более эффективным, хотя, если ваш код для анализа в шестнадцатеричном числе эффективен (это гораздо проще сделать, чем десятичное число), и предположим, что ваши числа достаточно малы, чтобы поместиться в регистр компьютера или два - еслиу вас были шестнадцатеричные строки длиной более 1000 цифр, тогда посимвольный способ может быть самым простым.

И в любом случае они читаются из файла: IO будет намного медленнее, чем сложение.Так что я бы не стал беспокоиться о каждом последнем выступлении для добавления.

1 голос
/ 02 марта 2011

это то, что вы хотите: http://www.ehow.com/how_7529899_read-hex-file-ansi-c.html

0 голосов
/ 02 марта 2011

Вы, кажется, немного сбиты с толку.

Если вы сделаете:

int a = 43, b = 12;

printf("%d+%d=%d\n", a, b, a + b);

компьютер не делает какие-либо "добавления в десятичном выражении".Добавление выполняется в двоичном формате, который преобразуется в / из десятичного текста во время компиляции для литералов и во время выполнения для распечатки.

Вы должны просто использовать strtol для разбора чисел,или sscanf() и добавление.

Ручное написание текстовых подпрограмм для «добавления в шестнадцатеричном формате» не будет лучше в любом случае.

...