Консультация № 78561
16.03.2007, 11:46
0.00 руб.
0 3 3
Подскажите,пожалуйста,каким образом данные типа ANSI string (например "FF") преобразовать в тип integer в шестнадцатиричном виде,а далее привести к обычному числовому виду.Проще говоря, в текстовом файле записано шестнадцатиричное число,надо получить его в десятичном виде.И вообще возможно ли ето. Заранее благодарен.

Обсуждение

Неизвестный
16.03.2007, 12:20
общий
это ответ
Здравствуйте, Козлов Николай Валерьевич!
Можно воспользоваться функцией sscanf() или atoi(), но они возьмут только последние 8 байтов исходной строчки, остальное потеряется или случится переполнение(и програма вылетит). Если вы хотите выполнить данную операцию для каждого символа произвольной последовательности шестнадцатеричных цифр в формате ASCII, то проще всего это сделать вручную:
char * st = "8899AABBCCDDEEFF";
int i;
for(i=0; i<strlen(st);i++)
{
switch(st[i])
{
case ‘0‘: printf("0"); break;
case ‘1‘: printf("1"); break;
...
case ‘E‘:
case ‘e‘: printf("15"); break;
case ‘F‘:
case ‘f‘: printf("16"); break;
}
}

В случае, если ваша строчка содержит числа разделеные пробелом или вы каким-либо образом знаете (в задании вы не указали этого) как строка делится на числа, то можете копировать каждое число в отделную строчку и воспользоваться atoi.
Неизвестный
16.03.2007, 12:22
общий
это ответ
Здравствуйте, Козлов Николай Валерьевич!

не совсем понятно. нужно получить это же чисто в текстовом виде но в десятичной формы? тогда вам будет необходимо преобразовывать в два этапа:
1) преобразование из текстового вида в бинарный
2) из бинарного в нужный текстовый вид

1) рекомендую функцию strtol с третьим параметром равным 16
(то есть преобразовать из текстового вида в 16-чной системы исчисления в бинарный)
2) преобразование из бинарного в текстовый обычно производится функцией sprintf(). аналогично printf(), только первым параметром можно указать стоку куда преобразовывать.

пример в приложении

если нужно просто преобразовать в бинарный вид то тогда вам нужен только пункт 1) Ж:-)

Приложение:
#include <stdio.h> #include <stdlib.h> int main() { char in[] = "ff"; char out[10]; long l; l = strtol(in, NULL, 16); sprintf(out, "%ld", l); printf("%s\n", out); return 0; }
Неизвестный
16.03.2007, 19:46
общий
это ответ
Здравствуйте, Козлов Николай Валерьевич!
Так примерно -
int c=0;
fscanf(fin,"%02X",&c);
Удачи!
Форма ответа