Как преобразовать байты из NSDATA в BigInt16?

У меня есть NSDATA, который является аудиобуфером (BIG_ENDIAN), я пытаюсь получить каждые 2 байта буфера и преобразовать его в формат int_16, чтобы применить кодек к этим результатам. Я пытаюсь сделать следующее:

-(NSData*)encodeSample:(NSData*)buffer
{

NSMutableData *backValue = [[NSMutableData alloc] init];

for (int i = 0; i < [buffer length]; i+=4) 
{

    if ( i+4 > [buffer length] )
    {
        break;
    }
    else 
    {

        NSRange range = {i,2};

        int16_t temp1 = OSReadBigInt16([buffer subdataWithRange:range], 0);
        int result1  = [self encode:temp1] & 0x0F; //codec call
        NSRange range2 = {i+2,2};
        int temp2 = OSReadBigInt16([buffer subdataWithRange:range2], 0);
        int result2 = [self encode:temp2] & 0x0F;
        Byte finalValue = (Byte) ((result1 << 4) | result2);

        [backValue appendBytes:&valorFinal length:sizeof(valorFinal)];

    }

Я читал документацию Apple по функции OSReadBigInt16 и думаю, что она не работает с NSDATA, и я не знаю, что делать, чтобы получить правильное значение.

У кого-нибудь есть идея, как получить байты из nsdata и преобразовать их в int_16?


person Roberto Ferraz    schedule 14.06.2011    source источник


Ответы (1)


См. функции упорядочения байтов в документации по базовым функциям. Есть много функций, таких как NSSwapIntToHost() и NSSwapShort()

Чтобы напрямую получить доступ к байтам, которые хранит экземпляр NSData, вы должны отправить ему сообщение -bytes, которое вернет const void *

person NSResponder    schedule 14.06.2011