#c #binaryfiles
#c #двоичные файлы
Вопрос:
Как показано на рисунке, если я прочитаю 2 байта со смещением 254786 и напечатаю его в шестнадцатеричном формате, я должен получить 0xffd9, и я получу это точное значение, если я напрямую установлю смещение на 254786. однако, если я установлю смещение на что-то далекое от 254786 и выполню цикл while, как показано на втором рисунке, я не получу 0xffd9. Я действительно не знаю, где я мог бы здесь ошибиться.
std::ifstream myfile ("test-01.jpg");
if(!myfile) throw std::runtime_error("unable to open input file");
myfile.seekg(254786,myfile.beg);
std::string buf {};
buf.resize(2);
myfile.read(amp;buf[0], 2);
std::cout << std::hex << std::showbase << big_endian_2_bytes_to_int(buf);
0xffd9
int offset = 17000
std::cout << offset << std::endl;
myfile.seekg(offset,myfile.beg);
myfile.read(amp;buffer[0],2);
while ( big_endian_2_bytes_to_int(buffer) != 0xffd9){
offset ;
myfile.seekg(offset,myfile.beg);
myfile.read(amp;buffer[0],2);
if (offset == 254786){
std::cout << offset <<std::endl;
std::cout << std::hex << std::showbase << big_endian_2_bytes_to_int(buffer) << std::endl;
return 0;
}
}
Комментарии:
1. 🚫📸 Пожалуйста, размещайте код, ошибки, образцы данных или текстовые выходные данные здесь в виде обычного текста, а не в виде изображений, которые могут быть трудными для чтения, не могут быть скопированы и вставлены, чтобы помочь тестировать код или использовать в ответах, и являются препятствием для тех, кто зависит от программ чтения с экрана. Вы можете отредактировать свой вопрос, чтобы добавить код в тело вашего вопроса. Для упрощения форматирования используйте
{}
кнопку, чтобы отмечать блоки кода, или отступ с четырьмя пробелами для того же эффекта. Содержимое скриншота нельзя найти, запустить как код или скопировать и отредактировать для создания решения.2. Чтение адреса символа в пустом
std::string
поле является неопределенным поведением.3. Вы открываете файл в текстовом режиме. Это не очень хорошая идея, особенно в Windows.
4. @molbdnilo Я даже не заметил этого, большое вам спасибо