我想将NSData转换为字节数组,因此我编写以下代码:

NSData *data = [NSData dataWithContentsOfFile:filePath];
int len = [data length];
Byte byteData[len];
byteData = [data bytes];

但最后一行代码会弹出一个错误,称为"分配中的不兼容类型".

推荐答案

不能使用变量声明数组,所以Byte byteData[len];不起作用.如果要从指针复制数据,还需要memcpy(它将遍历指针指向的数据,并将每个字节复制到指定的长度).

try :

NSData *data = [NSData dataWithContentsOfFile:filePath];
NSUInteger len = [data length];
Byte *byteData = (Byte*)malloc(len);
memcpy(byteData, [data bytes], len);

此代码将动态地将数组分配到正确的大小(完成后必须为free(byteData)),并将字节复制到其中.

如果你想使用固定长度的数组,你也可以按照别人的指示使用getBytes:length:.这避免了malloc/free,但扩展性较差,更容易出现缓冲区溢出问题,所以我很少使用它.

Objective-c相关问答推荐

NSViewController 中的 viewDidLoad?

UITabBar 中的自定义 colored颜色

UITableView/UITableViewCell 点击事件响应?

ARC的正确桥接?

在 Objective-C 类中混合 C 函数

为什么我的 UIButton 的内部修饰事件没有被调用?

以原子方式写入文件与不写入文件之间的区别

在Objective-C中从类名的NSString创建对象

如何调整 UIModalPresentationFormSheet 的大小?

如何将日期字符串解析为 iOS 中的 NSDate 对象?

在Objective-C中替换字符串中的多个字符?

Objective-C 中是否有一些文字字典或数组语法?

iPhone:在 UITextField 上禁用 Auto-Cap/autocorrect 问题

UIWebView didFinishLoading 多次触发

在 NSArray 中查找最大数值

UILabel 根据要显示的文本自动调整大小

如何本地化 iOS 故事板

UICollectionView 断言失败

Xcode中私有方法的单元测试

Foo 类在 MyApp 和 MyAppTestCase 中都实现了.将使用两者之一.哪个是未定义的