Принимая данные для fstream :: seekp и fstream :: put - PullRequest
2 голосов
/ 28 сентября 2011

Как мне поступить с входными данными для seekp и использовать их с hex? Что-то вроде этого? Cin >> шестигранной >> MyChar;

Как насчет печати правильного значения в шестнадцатеричном формате? Скажем, в 0x16 байт FF или 255 без знака 8 бит (десятичный?), Когда я делаю это

fstream mystream;
mystream.seekp(0x16);
long myvar;
myvar=mystream.tellp();
cout<<"Value at offset 0x16: "<<myvar;

Он печатает 22 im, предполагая, что, так как я открыл файл в двоичном режиме, поэтому его печать 22 в качестве значения FF в двоичном формате похожа на 2222222 и т. Д.

Существует ли правильный тип данных для печати значения с определенным смещением (я пробовал long и char и int, но это все равно дает 22) или я их печатаю неправильно? Я искал в Google, но не смог найти никакой помощи в этом отношении, однако я заметил, что открытие файла в двоичном формате рекомендуется для редактирования с помощью hex.

1 Ответ

1 голос
/ 28 сентября 2011

Есть несколько проблем с вашим кодом:

  • ostream::seekp устанавливает указатель «put», т. Е. Местоположение, в котором записываются данные, а не положение, в котором считывает данные.Используйте istream::seekg для установки указателя «get»
  • ostream::tellp не выполняет никаких операций ввода-вывода.Он просто сообщает значение указателя 'put', но фактически не извлекает данные, хранящиеся там.Вы хотите использовать istream::get.

Ваша программа печатает десятичное число 22, равное шестнадцатеричному числу 0x16.Это связано с тем, что seekp устанавливает указатель пут в 0x16, а tellp просто сообщает значение указателя пут - 0x16!

Попробуйте этот код:

fstream mystream;
mystream.seekg(0x16);
int myvar;
myvar=mystream.get();
cout<<"Value at offset 0x16: "<<myvar << "\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...