2013-09-26 2 views
0

я имею двоичное значение для чтения из файла и должны сделать сравнение ли его в 1 или 0 , но когда я пытаюсь сравнитьсимвол и «0» сравнение в с не ++ дает требуемые результаты

char ch; 
while(!in.eof()){ 
    in.get(ch); 
    if(ch=='0') count0++; 
} 

выше код не выполняется, даже если -СН = «0»

if(ch=='1') count1++; 

, что тоже не дает мне правильный ответ , как это можно сравнивать? он должен что-то сделать с кодированием ascii или что-то в этом роде?

От комментария: Содержание файла 01101111111111111100000000 просто так. Это файл .txt

+0

значение ' '0'' не 0. Вы хотите'' \ 0''. – jrok

+4

Является ли файл, который вы читаете двоичный файл, или это текстовый файл, содержащий символы '' 0'' и '' 1''? –

+0

@jrok Почему не просто 'ch == 0'? 'char' является интегральным типом. – dyp

ответ

0

Ваш вопрос оставляет некоторое пространство для интерпретации.

Вы говорите, что ваш файл содержит «1» и «0». Все файлы содержат их и нули. Компьютеры содержат не более, чем одни и нули (шутка!).

Поскольку вы говорите, что у вас есть двоичный файл, я предполагаю, что вы пытаетесь спросить, как читать содержимое файла по частям. Это то, что вы просите?

Если нет, то у вас уже есть ответы в комментариях. Отбросьте остальную часть этого сообщения.

Если да, вы должны сначала прочитать байт по байту (т. Е. Char by char), как вы это делаете, а затем итеративно применить некоторые маски к байту, чтобы увидеть, есть ли в данной позиции в байте один или ноль (это - how to convert a char to binary? - может помочь).

+0

нет содержимого файла 01101111111111111100000000 так же, как и файл .txt – sara

0

Никогда не используйте eof() в качестве альтернативы для проверки того, было ли чтение из файла успешным или нет.

Это может выглядеть следующим образом:

std::ifstream in("test.txt", std::ifstream::in); 
if (!in.is_open()) { 
    std::cout << "Error opening file"; 
    return -1; 
} 

int count0 = 0, 
    count1 = 0; 
char ch; 
while (in.get(ch)) { 
    if (ch == '0') 
     count0++; 
    else if (ch == '1') 
     count1++; 
} 
Смежные вопросы