我可以定义从 NSData 读取的字节顺序吗?

Can i define in what endianess i read from NSData?

我在 Android 设备上写入了一些文件,它以大端字节序写入字节。 现在我尝试用 iOS 读取这个文件,我需要它们在小端。

我可以做一个for循环并且

int temp;
for(...) {
  [readFile getBytes:&temp range:NSMakeRange(offset, sizeof(int))];
  target_array[i] = CFSwapInt32BigToHost(temp);
  // read more like that
}

然而,在我可以存储它之前读取每个值并转动它感觉很愚蠢。我可以告诉 NSData 我想要以特定字节顺序读取的值,以便我可以直接将其存储在应有的位置吗?

(节省一些时间,因为数据可能会很大)

我也担心某些数据类型更改时会出错,我忘记使用 16 而不是 32 交换。

不,您需要交换每个值。 NSData 只是一系列没有价值或意义的字节。理解含义的是您的应用程序,因此您的代码逻辑必须根据需要交换每组字节。

数据可以填充各种不同大小的值。 8 位值、16 位值、32 位值等,以及字符串数据或根本不需要任何排序的字节流。 NSData 可以包含这些值的任意组合。

鉴于所有这些,没有简单的方法可以告诉 NSData 字节需要以特定的字节序处理。

例如,如果您的数据只是以特定字节顺序存储的 32 位整数值,并且您想提取一个字节数组,请创建一个帮助程序 class 来执行转换。