QByteArray на unsigned char не копирует полностью - PullRequest
0 голосов
/ 11 июля 2019

Мне нужно преобразовать QByteArray QImage в unsigned char *.

Я делаю это по:

QByteArray data;
QBuffer buffer(&data);

buffer.open(QIODevice::WriteOnly);
convImage.save(&buffer, "PNG");
buffer.close()

unsigned char *data_image = (unsigned char *)malloc(data.size());
memcpy(data_image, reinterpret_cast<unsigned char *>(data.data()), (unsigned int)data.size());

Но результат data_image по сравнению с QByteArray изображения выглядит так:

enter image description here

data = (QByteArray of Image)

data_image = неподписанный символ * из данных

Я думаю, что это не полностью скопировано. Мне нужны данные без знака * для внешней функции DLL.

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Если у вас есть QImage, вы можете сделать это проще:

unsigned char *data_image = (unsigned char *)malloc(convImage.sizeInBytes());
memcpy(data_image, convImage.bits(), convImage.sizeInBytes());
1 голос
/ 11 июля 2019

Вы не видите полную длину массива data_image, потому что это просто указатель, и нет способа узнать, каков его фактический размер.Таким образом, отладчик применяет некоторые стандартные правила для остановки, когда считает, что должен.По такому правилу стоит останавливаться на пустом байте.

Если вы используете Qt Creator, есть несколько способов заставить отладчик показывать больше данных:

  1. Правой кнопкой мышина интересующей вас переменной и выберите Change Value Display Format > Array of xxx items.Это самый простой способ, но он ограничен, так как вы можете выбрать только 10, 100, 1000 или 10000 элементов.
  2. Щелкните правой кнопкой мыши на интересующей вас переменной и выберите Open Memory Editor > Open Memory View At Object Address.Это наиболее универсально, так как вы можете видеть все в памяти, но это может быть более запутанным, если вы не привыкли играть с представлениями памяти.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...