我可以定义从 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 来执行转换。
我在 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 来执行转换。