代码之家  ›  专栏  ›  技术社区  ›  NikkyD

我可以定义我从NSData中读取的尾数吗?

  •  1
  • NikkyD  · 技术社区  · 10 年前

    我有一些文件是在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交换。

    1 回复  |  直到 10 年前
        1
  •  1
  •   rmaddy    10 年前

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

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

    考虑到所有这些,没有简单的方法来判断 操作文件数据 字节需要以特定的结尾处理。

    例如,如果您的数据只存储在特定的尾数中的32位整数值,并且您希望提取一个字节数组,请创建一个执行转换的助手类。