У меня есть файл двоичных данных. Существует двоичный заголовок в несколько тысяч байт. Задача состоит в том, чтобы прочитать байты 3000 и 3001. Хорошая новость заключается в том, что он должен прочитать одно из двух значений: 1 или 5. Сложная часть для меня заключается в том, что число сохраняется как целое число с дополнением до двух. Я поставлю в двоичном режиме, но я не знаю, куда идти оттуда.
Я вижу один маршрут, так как есть только два значения, но не знаю, как это сделать. Я считаю, что мне нужно либо 1 = 0000 0000 0000 0001, либо 5 = 0000 0000 0000 0101, поэтому мне нужно только посмотреть на байт 3001. Дело в том, что я не знаю, как отобразить значение из отдельного байта. Мне нужно либо значение байта 3001, либо, если есть способ получить доступ к отдельным битам, было бы здорово просто отобразить на экране байт 3001 как 0000 0001 или 0000 0101.
Для вашей задачи «прочитайте байты 3000 и 3001», просто используйте простые seekg
cin.seekg(3);
char c;
cin >> c;
bitset < 8 > s(c);
cout << s;
С этим кодом и вводом «abcdefg» вы получите вывод «d»;
Но будьте осторожны при работе с двоичными данными. Например, если вы действительно уверены, что из 3000 хранится int (обычно 4 байта), то проблем нет. Но если в этом месте хранится, например, short, и вы читаете в int, то это будет 100% мусор и очень высокая вероятность испортить следующие данные.
Других решений пока нет …