противоречивые результаты при чтении файла в двоичном c . ЧТЕНИЕ ТЕЛА

#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 Я даже не заметил этого, большое вам спасибо