Russian Qt Forum
Ноябрь 22, 2024, 12:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Преобразование типов  (Прочитано 2917 раз)
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;
    }
« Последнее редактирование: Март 30, 2015, 10:12 от alex.kru » Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #1 : Март 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));
}
 
 

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

Код
C++ (Qt)
while(!asleep()) sheep++;
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.099 секунд. Запросов: 23.