Russian Qt Forum

Qt => Мультимедиа => Тема начата: alex.kru от Март 30, 2015, 09:42



Название: Преобразование типов
Отправлено: alex.kru от Март 30, 2015, 09:42
Добрый день.
Для кодирования, декодирования голоса использую библиотеку. Функция декодирования возвращает указатель на short.
Как мне обработать или преобразовать short[] , чтобы передать его параметром ?
Код:
qint64 QIODevice::write(const QByteArray & byteArray) 
Код на java, как сделать в Qt ?
Код:
 //Conversion of short to byte
    private byte[] short2byte(short[] sData) {
        int shortArrsize = sData.length;
        byte[] bytes = new byte[shortArrsize * 2];

        for (int i = 0; i < shortArrsize; i++) {
            bytes[i * 2] = (byte) (sData[i] & 0x00FF);
            bytes[(i * 2) + 1] = (byte) (sData[i] >> 8);
            sData[i] = 0;
        }
        return bytes;
    }


Название: Re: Преобразование типов
Отправлено: Kurles от Март 30, 2015, 10:26
Если целевая машина заведомо имеет порядок байт little endian, то можно просто тупо кастануть указатель на short к char*.

Код
C++ (Qt)
short *source = ....;
char *converted = (char*) source;
QIODevice *dev = ...;
dev->write(converted, len_of_sourse * sizeof(short));
 

или можно по аналогии с явой:
Код
C++ (Qt)
#include <QtEndian>
int len_of_source = ...;
short *source = ....;
int sample_len = sizeof(short);
QByteArray array(len_of_source * sample_len, 0);
for (int i = 0; i < len_of_source; ++i) {
   qToLittleEndian<short>(source[i], array.data() + (i * sample_len));
}
 
 

писал в браузере, возможны ошибки, но идея должна быть понятна.