【问题标题】:How to convert bytes from NSDATA to BigInt16?如何将字节从 NSDATA 转换为 BigInt16?
【发布时间】:2011-09-15 01:41:47
【问题描述】:

我有一个 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)];

    }

我正在阅读函数 OSReadBigInt16 的苹果文档,我认为它不适用于 NSDATA,我不知道如何才能获得正确的值。

有人知道如何从 nsdata 获取字节并将其转换为 int_16?

【问题讨论】:

    标签: iphone objective-c int nsdata


    【解决方案1】:

    请参阅基础函数文档中的字节排序函数。有很多类似NSSwapIntToHost()NSSwapShort()的函数

    要直接访问NSData 实例存储的字节,您必须向其发送-bytes 消息,该消息将返回const void *

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      相关资源
      最近更新 更多