Данные в файле выглядят как строка шестнадцатеричных значений. Ваша попытка прочитать эти данные пытается прочитать их с использованием десятичной дроби. Поскольку он начинается с десятичной цифры, а последовательность десятичных цифр не превышает максимального значения для int
, попытка чтения удается получить одно значение. Это почти наверняка не , что вы на самом деле хотите сделать с этими данными.
Теперь, что на самом деле делать с этими данными, это отдельный вопрос. Вы можете захотеть прочитать подходящие группы шестнадцатеричных символов в соответствующие целые числа. Правильно ли это делать, зависит от того, что должны означать данные. Кажется, в цитируемом вами разделе есть повторяющийся шаблон (переписанный с разрывом строки после 16 символов / 8 байт):
00000248EC48FE50
00000248EC48FE54
00000248EC48FE58
00000248EC48FE5C
Кажется, это означает, что данные содержат некие 64-битные данные, записанные в hex
. Форматированный ввод, используемый IOStreams, действительно любит получать пробелы. Одним из способов декодирования этих данных является чтение их в буфер с 16 символами, обновление строкового потока этими данными и чтение данных оттуда в виде шестнадцатеричных данных:
std::istringstream sin;
sin >> std::hex;
char buffer[16];
while (read.read(buffer, 16)) {
sin.str(std::string(buffer, buffer + read.gcount()));
sin.clear();
std::uint64_t value;
if (!(sin >> value)) {
break;
}
buffer.push_back(value);
}