2016-01-01 5 views
0

Я пытаюсь прочитать файл двоичных данных с помощью 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», все они встанут правильно. Я думаю, что у меня возникают проблемы с преобразованием типов, пытаясь поместить туда целое число.

ответ

0

Прежде всего, целое число может иметь размер не только 4, но и 8 байт, поэтому вы должны использовать sizeof(integer) вместо 4. Затем вы можете преобразовать целое число в строку с Qstring::number(newInteger). QString можно преобразовать в bytearray с помощью QString::toLatin1()

+2

Помните, что «порядок байтов» между зазорами может быть разным на нескольких устройствах. Пока вы используете файл только на устройстве, которое вы создали, это нормально, но если вы меняете файлы, используйте [QtEndian] (https://doc.qt.io/qt-5/qtendian.html) для преобразования в либо из двух байтов – Felix

+0

Спасибо за советы. Я дам ему попробовать и обновить/принять, как только у меня будет такая возможность. – Derek

Смежные вопросы