Преобразовать void *(void * const mAudioData) в Short * с помощью Objective c?

у меня есть аудиоданные AudioQueueBuffer в формате void * const. мне нужен короткий массив (short *) аудиоданных для моего кодека.

Как преобразовать void * const в Short * в Objective c??? тип приведения от пустоты к короткому возможен? или мне нужно использовать некоторое преобразование порядка байтов, например OSReadBigInt16??? если да образец для конвертации? пожалуйста, помогите мне найти решение.


person Asta ni enohpi    schedule 13.01.2012    source источник
comment
Спасибо всем. само приведение типов работает нормально   -  person Asta ni enohpi    schedule 18.01.2012


Ответы (2)


Да, Objective-C похож на C для приведения типов. Это означает, что если вы хотите интерпретировать указатель void * как указатель short *, все, что вам нужно сделать, это:

(short *)voidPointer

Если байты расположены не в правильном порядке (т. е. несоответствие порядков байтов), вам также придется иметь дело с этим - однако невозможно определить, так ли это, на основе информации в вашем вопросе.

person Carl Norum    schedule 13.01.2012
comment
спасибо за быстрый ответ. мне нужно вышеуказанное преобразование для устройства IOS. и еще одна вещь, у меня есть typecast unsigned char из void * (который является 8-битным), он отлично работает. если я наберу короткое (16 бит) возможно ??? - person Asta ni enohpi; 13.01.2012
comment
Вы вообще не можете разыменовывать void *, так что кого волнует, какой «размер» у данных, на которые он указывает? Это полностью зависит от вас и специфики вашей программы, будет ли она работать или нет. На какие данные указывает указатель void *? Это 16-битные двоичные данные? Если да, то простое приведение типов подойдет. Если нет, у вас будет больше работы. - person Carl Norum; 13.01.2012
comment
Проверьте документацию по API, который дал вам указатель. - person Carl Norum; 13.01.2012
comment
Извините за глупый вопрос ? как найти указатель void *? будь то 16 или 8 бит? в настоящее время у меня есть структура AudioQueueBuffer, как я могу избавиться от этого? я упомянул AudioQueueBuffer, но они не указывают указатель на пустоту? - person Asta ni enohpi; 13.01.2012
comment
Проверьте эту ссылку. Похоже, вы, вероятно, хотите использовать AudioQueueGetProperty. - person Carl Norum; 13.01.2012
comment
Я хотел бы +10, потому что вы подняли проблемы с порядком байтов. - person Evan; 13.01.2012

void* — это соглашение для объявления нетипизированных указателей. Такие указатели необходимо повторно интерпретировать как указатели на некоторый тип данных. Работает это или нет, зависит от того, что вы или API поместили по адресу, на который указывает указатель void*: если это последовательность значений short без пробелов, простое приведение к short* сработает; в противном случае может потребоваться дополнительное преобразование.

person Sergey Kalinichenko    schedule 13.01.2012