Чтение расширенных символов ASCII из файла и преобразование в десятичное значение ASCII - PullRequest
0 голосов
/ 14 июля 2010

Я пытаюсь прочитать содержимое файла (который содержит как «стандартный» текст, так и «двоичные» данные).

Затем мне нужно взять этот символ (стандартный или расширенный ASCII) и получить соответствующее десятичное (int) значение ASCII.

У меня очень много времени, чтобы заставить его работать правильно.

Вот фрагмент кода, чтобы показать, что я сейчас делаю ...

FILE *fp = fopen(file, "r+");

char *value = NULL;

size_t charSize = sizeof(char) + 1;

value = malloc(charSize);

strcpy(value, "0");

fseek(fp, offset, SEEK_SET);

fgets(value, charSize, fp);

int c = (int)value;

free(value);

Я прочитал сообщение о том, что вам нужно использовать unsigned char для расширенного ascii, однако переход на unsigned char не решил проблему (и дал предупреждения компиляции)

Я также пытался использовать wchar_t с кодом:

....

wchar_t *value = NULL;
value = malloc(2);

wcscpy(value, (wchar_t *)"");

fseek(fp, offset, SEEK_SET);

fgetws(value, 2, fp);

int c = (int)value;

Ничто из этого не похоже на работу. Я либо получаю 0 для практически всего, либо какое-то «случайное» значение.

Например, используя любой из трех, которые я получаю: значение:% (правильно) c: 76678304 (число меняется каждый раз, но в одном и том же «диапазоне») (что-то говорит мне, что это не правильно):)

Так что, очевидно, я делаю что-то не так, но я просто не могу понять это ...

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 14 июля 2010

Я думаю, что ваша основная проблема:

int c = (int)value;

Это должно быть:

int c = *value;

Вы разыменовываете значение, чтобы получить персонажа в этой позиции.Это эквивалентно value[0].Раньше вы приводили указатель на int, который объясняет большие значения мусора.Не отбрасывайте свои проблемы.

strcpy является избыточным, поскольку fgets запишет оба байта (последний является NUL-терминатором), если в нем нет ошибки или EOF.Если вы хотите завершить NUL заранее, вы должны использовать '\ 0' (NUL), а не '0' (цифра ASCII 0).И вы могли бы просто сделать:

*value = '\0';
0 голосов
/ 14 июля 2010

Ваш код гораздо сложнее, чем нужно - вы можете просто сделать это:

FILE *fp = fopen(file, "r+");

fseek(fp, offset, SEEK_SET);

int c = fgetc(fp);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...