QByteArray
имеет конструктор , который делает именно это.
Вот как это использовать:
const char* data; int size; // these variables should be correctly set to your array and size
QByteArray ba(data, size);
Я использовал указатель для данных, но массивы распадаются на указатели при передаче в качестве параметров, так что это то же самое. Этот конструктор сделает глубокую копию данных. Это означает, что он станет владельцем только той копии, которую он делает, и данные, которые вы использовали, могут быть освобождены, если они были выделены динамически.
Для массивов других типов, отличных от char
, вы по существу выполняете сериализацию:
int data[30];
for (int i = 0; i < 30; ++i)
{
ba.append((const char*)(data + i), sizeof(int));
}
Приведенный выше код вставит байты, составляющие ваши целые, в QByteArray
. Однако будьте осторожны, поскольку на этом этапе индексирование QByteArray
не возвращает целые числа, а байты, из которых они сделаны.
Чтобы преобразовать QString (это не то, что вы просили, а добавил комментарий, запрашивающий его), используйте одну из соответствующих функций-членов QString
:
QByteArray ba = str.toLocal8bit();
QByteArray ba2 = str.toLatin1();
QByteArray ba3 = str.toUtf8();
QByteArray ba4 = str.toAscii();
Чтобы решить, какой из них использовать, вы должны знать кодировку вашей строки. Для преобразования между кодировками используйте QTextCodec