将 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]);
}
}
我想将 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]);
}
}