Я пытаюсь прочитать файл двоичных данных с помощью QDataStream и QByteArray, внести некоторые изменения и сохранить в качестве нового файла.Вставка целого числа в QByteArray
У меня есть следующие:
QDataStream in_datastream(&file);
QByteArray fileByteArray = file.readAll();
//find my insertion point
int pos = fileByteArray.indexOf(magic_num, 0);
//move to insertion point, minus 4 bytes (size of an integer)
file.seek(pos-4);
int current_val;
//check what the value is here
in_datastream >> current_val;
//now, I want to replace that value..but how?
Я попробовал несколько вещей, на данный момент, но не могу понять, как заставить его работать. Я хочу вставить целое число 5000 в (pos-4) в QByteArray.
//remove 4 bytes..this seems to work
fileByteArray.remove(pos-4, 4);
//actually inserts garbage.
fileByteArray.insert(pos-4, newInteger);
Если я попытаюсь вставить строку с четырьмя символами «TEST», все они встанут правильно. Я думаю, что у меня возникают проблемы с преобразованием типов, пытаясь поместить туда целое число.
Помните, что «порядок байтов» между зазорами может быть разным на нескольких устройствах. Пока вы используете файл только на устройстве, которое вы создали, это нормально, но если вы меняете файлы, используйте [QtEndian] (https://doc.qt.io/qt-5/qtendian.html) для преобразования в либо из двух байтов – Felix
Спасибо за советы. Я дам ему попробовать и обновить/принять, как только у меня будет такая возможность. – Derek