Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > ifstream.get(char ch); ch имеет 0xFFA1


Автор: 02077461 13.5.2008, 14:36
Добрый день.
Написал простой код 
Код

    ifstream fin;
    char ch = 0;
    while (fin.get(ch)){
        printf("VALUE %#x %i %i \n", (char)ch, ch, sizeof(ch));
    }


На выходе дает 
Код

VALUE 0xffa1 -95 1
VALUE 0x1 1 1
VALUE 0x3 3 1
VALUE 0xffde -34 1
VALUE 0xffad -83 1
VALUE 0 0 1
VALUE 0 0 1
VALUE 0xffde -34 1
VALUE 0xffad -83 1


Как в однобайтовой переменной типа char помещается 0xFFA1?
К слову, значения кроме FF все правильные, т.е. читает из файла верно.

Автор: Lazin 13.5.2008, 14:45
printf приводит char к без-знаковому двух-байтовому целому  smile 

Автор: 02077461 13.5.2008, 14:59
добавил if (0xA1 == ch) cout << "0xA1";
Код

while (fin.get(ch)){
        if (0xA1 == ch)
            cout << "0xA1";
        printf("VALUE %#x %i %i \n", (char)ch, ch, sizeof(ch));
    }

Вывод по прежнему тот же. Т.е. ch не содержит 0xA1

Автор: Rififi 13.5.2008, 16:14
02077461, 
ты оказался жертвой такого понятия, как "расширение знаком", ибо диапазон возможных значений типа char лежит в пределах -128 .. 127

Код
unsigned char uch = (unsigned char) ch;
if (uch == 0xA1) {}

Автор: 02077461 13.5.2008, 16:21
Большое спасибо! Все получилось. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)