У меня есть бинарный файл. я читаю 16 байт за раз, используя fstream.
Я хочу преобразовать его в целое число. Я попробовал Atoi. но это не сработало.
В Python мы можем сделать это путем преобразования в поток байтов с помощью stringobtained.encode ('utf-8'), а затем преобразовать его в int с помощью int (bytestring.hex (), 16). Должны ли мы следовать таким шагам elloborate, как это делается в python, или есть ли способ преобразовать его напрямую?
ifstream file(binfile, ios::in | ios::binary | ios::ate);
if (file.is_open())
{
size = file.tellg();
memblock = new char[size];
file.seekg(0, ios::beg);
while (!file.eof())
{
file.read(memblock, 16);
int a = atoi(memblock); // doesnt work 0 always
cout << a << "\n";
memset(memblock, 0, sizeof(memblock));
}
file.close();
Edit:
Это пример содержимого файла.
53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00
04 00 01 01 00 40 20 20 00 00 05 A3 00 00 00 47
00 00 00 2E 00 00 00 3B 00 00 00 04 00 00 00 01
Мне нужно прочитать его как 16 байт, то есть 32 шестнадцатеричные цифры за раз (т. Е. Одну строку в содержимом образца файла) и преобразовать его в целое число.
поэтому при чтении 53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00 , я должен получить, 110748049513798795666017677735771517696
Но я не мог этого сделать. Я всегда получаю 0 даже после попытки strtoull. Я неправильно читаю файл или чего мне не хватает.