我有一个音频缓冲区(BIG_ENDIAN)的NSDATA,我试图获取缓冲区的每2个字节并将其转换为int_16格式以在这些结果中应用编解码器。我正在尝试以下方法:< / p>
-(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)];
}
我正在阅读函数OSReadBigInt16的苹果文档,我认为它不适用于NSDATA,我不知道如何获取正确的值。
有人知道如何从nsdata获取字节并将其转换为int_16?
答案 0 :(得分:0)
请参阅Foundation Functions文档中的字节顺序功能。有很多功能,例如NSSwapIntToHost()
和NSSwapShort()
要直接访问NSData
实例正在存储的字节,您必须向其发送-bytes
消息,该消息将返回const void *