Чтение из файла байт на байт C ++ - PullRequest
0 голосов
/ 20 декабря 2011

Я пытаюсь написать программу на C ++, которая будет брать 2 файла и сравнивать их побайтно.

Я искал следующий пост

Чтение двоичного байта istream за байтом

Я не совсем уверен в части этого. При использовании get (char & c) он читает в char и сохраняет его в c. Это хранение как, скажем, 0x0D, или оно хранит фактическое значение символа "c" (или что-то еще)?

Если я хочу использовать этот метод для сравнения двух файлов побайтно, я бы просто использовал get (char & c) для обоих, затем сравнил полученные символы или мне нужно привести к байту?

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

Ответы [ 2 ]

2 голосов
/ 20 декабря 2011

char s - это не что иное, как «специальный тип памяти» (извините за выражение) для целых чисел, в памяти нет разницы между 'A' и десятичным значением 65 (предполагается ASCII).

c будет другими словами содержать прочитанный байт из файла.


Чтобы ответить на ваш добавленный вопрос;нет, не требуется никакого приведения, выполнение c1 == c2 будет в порядке.


  char c1 = 'A', c2 = 97, c3 = 0x42; 

  std::cout <<  c1  << "  " <<    c2 << "  " <<    c3 << std::endl;
  std::cout << +c1  << " "  <<   +c2 << " "  <<   +c3 << std::endl;

/ * Запись +c1 в приведенной выше волеприведите c1 к int, это то же самое, что написать (int)c1 или более правильный (c ++ ish) static_cast<int> (c1). * /

вывод:

A  a  B
65 97 66
0 голосов
/ 20 декабря 2011

Эмм,

символ содержит 1 байт Интерпретация этого значения действительно зависит от вас, программиста.

Если вы напечатаете этот байт в потоке cout, он будет интерпретирован с помощью кода ASCII, и, следовательно, если ваш символ равен 0x63, он выведет на экран 'c'.

Если вы просто используете значение, вы можете использовать его как хотите ..

char c = 0x63;
c++;
// c is now: 0x64

Обратите внимание, что вы также можете ввести десятичные числа

...