将 NSData 转换为 unsigned char* 时,我得到了错误的结果

When converting NSData to unsigned char*, I get the wrong result

我想将 UIImage 转换为 unsigned char*。首先,我将 UIImage 转换为 NSData,然后将 NSData 转换为 unsigned char*。我使用以下方法将 NSData 转换为 unsigned char*:

unsigned char *binaryData = (unsigned char *)[imageData bytes];

问题是imageData中有很多字节(这是一个NSData),但是在这个方法之后,binaryData只是0x75e8000。我不知道为什么。有人可以帮我吗?你能建议我一种将 NSData 正确转换为 unsigned char* 的方法吗?

提前致谢!!!

我认为您不了解什么是 C 数组。它表示为指向数组开头的指针。您的 0x75e8000 数组的开头。但是该数组不包含有关其长度的信息;可能还有多少数据未知。

还有,你可能不明白bytes方法是什么。 bytes 方法不会 "convert" 任何东西,也不会生成副本;它只是提供一个指向 NSData 本身的指针。只要 NSData 存在,bytes 就指向它,但将其视为 const void*(您将其转换为 unsigned char*),适合传递给 C 函数。

因此,必须单独获取 C 数组的长度,您需要将其告知任何使用此信息的 C 函数;它是 NSData 对象的 length。如果你想提取数据,作为一个副本,到separate C数组,然后调用getBytes:length:.

没有什么比发布代码更明确的了。

    - (void)viewDidLoad {

        [self test];
    }

    - (void)test {

        // Put a picture named "test.jpg" in your app bundle
        NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"jpg"];
        NSData *data = [NSData dataWithContentsOfFile:path];
        char buffer[data.length];

        // Print them out
        [data getBytes:buffer length:data.length];
        for (int i = 0; i < data.length; i++) {
            printf("0x%02x ",(unsigned char)buffer[i]);
        }
    }