在Swift中,如何将现有的二进制文件读入数组?

查尔斯

作为我的项目的一部分,我有一个二进制数据文件,该文件由一系列的32位整数组成,我的一个类在初始化时会读取这些文件。在我的C ++库中,我使用以下初始化程序将其读取:

Evaluator::Evaluator() {
    m_HandNumbers.resize(32487834);
    ifstream inputReader;

    inputReader.open("/path/to/file/7CHands.dat", ios::binary);

    int inputValue;
    for (int x = 0; x < 32487834; ++x) {
        inputReader.read((char *) &inputValue, sizeof (inputValue));
        m_HandNumbers[x] = inputValue;
    }
    inputReader.close();
};

在移植到Swift时,我决定将整个文件读入一个缓冲区(只有130 MB),然后将字节复制到缓冲区之外。

因此,我完成了以下操作:

public init() {
    var inputStream = NSInputStream(fileAtPath: "/path/to/file/7CHands.dat")!
    var inputBuffer = [UInt8](count: 32478734 * 4, repeatedValue: 0)
    inputStream.open()
    inputStream.read(&inputBuffer, maxLength: inputBuffer.count)
    inputStream.close()
}

而且它的工作原理很好,因为在调试它时,我可以看到inputBuffer包含了我的十六进制编辑器认为应该包含的相同字节数组。现在,我想有效地从那里获取数据。我知道它存储在..无论哪种格式,最低有效字节都在最前面(即文件中的数字0x00011D4A表示为“ 4A1D 0100”)。我很想手动遍历它并手动计算字节值,但是我想知道是否有一种快速的方法可以传递[Int32]数组并将其读入这些字节。我尝试使用NSData,例如:

    let data = NSData(bytes: handNumbers, length: handNumbers.count * sizeof(Int32))
    data.getBytes(&inputBuffer, length: inputBuffer.count)

但这似乎并未加载这些值(所有值仍为零)。谁能帮助我将此字节数组转换为一些Int32值?更好的办法是将它们转换为Int(即64位整数),只是为了在整个项目中保持变量大小相同。

格里姆森

不确定您的字节序,但是我使用以下功能。与您的代码的区别在于使用NSRanges的是实际所需的类型,而不是字节的长度。该例程一次读取一个值(适用于ESRI文件,其内容随字段而异),但应易于适应。

func getBigIntFromData(data: NSData, offset: Int) -> Int {
    var rng = NSRange(location: offset, length: 4)
    var i = [UInt32](count: 1, repeatedValue:0)

    data.getBytes(&i, range: rng)
    return Int(i[0].bigEndian)// return Int(i[0]) for littleEndian
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将文件嵌入Golang二进制文件?

来自分类Dev

如何有效地将二进制文件读入向量C ++

来自分类Dev

如何将Flask收到的二进制文件存储到postgres中

来自分类Dev

如何将std :: vector <bool>转储到二进制文件中?

来自分类Dev

将二进制文件读入MIPS中的数组

来自分类Dev

如何将字符串数组写入二进制文件?

来自分类Dev

如何将压缩的二进制文件读取为浮点数数组

来自分类Dev

如何将十进制数转换为二进制数,并将二进制数保存在数组中?

来自分类Dev

Objective-C至C ++将二进制文件读入float的多维数组

来自分类Dev

如何将二进制值更改为具有各个状态的数组

来自分类Dev

.net:将二进制文件读入内存然后进行访问的有效方法

来自分类Dev

如何将二进制文件安装到NixOS中

来自分类Dev

如何将列中的二进制数据转换为文件?

来自分类Dev

如何将原始二进制数组数据加载到Julia中并显示出来?

来自分类Dev

如何将二进制文件添加到现有的PPA包中

来自分类Dev

如何将结构数组的二进制副本写入文件

来自分类Dev

如何将* .o目标文件链接到内核二进制文件中

来自分类Dev

文件流将十六进制文件读入二进制缓冲区

来自分类Dev

将二进制文件读入MIPS中的数组

来自分类Dev

如何将数据插入已编译的MCU二进制文件中

来自分类Dev

如何将二进制文件的内容放在c中的字符串中?

来自分类Dev

将二进制文件读入int数组C ++

来自分类Dev

在C ++中将二进制文件读入char数组

来自分类Dev

如何将这个二进制乘法代码的答案带入二进制?

来自分类Dev

如何将二进制文件读入数组

来自分类Dev

swift3中更干净的方式将二进制读入Float

来自分类Dev

将二进制文件读入std :: vector <bool>

来自分类Dev

如何将所有二进制文件打包到 bazel 中?

来自分类Dev

如何将二进制文件中的结构写入另一个二进制文件中的嵌套结构?

Related 相关文章

  1. 1

    如何将文件嵌入Golang二进制文件?

  2. 2

    如何有效地将二进制文件读入向量C ++

  3. 3

    如何将Flask收到的二进制文件存储到postgres中

  4. 4

    如何将std :: vector <bool>转储到二进制文件中?

  5. 5

    将二进制文件读入MIPS中的数组

  6. 6

    如何将字符串数组写入二进制文件?

  7. 7

    如何将压缩的二进制文件读取为浮点数数组

  8. 8

    如何将十进制数转换为二进制数,并将二进制数保存在数组中?

  9. 9

    Objective-C至C ++将二进制文件读入float的多维数组

  10. 10

    如何将二进制值更改为具有各个状态的数组

  11. 11

    .net:将二进制文件读入内存然后进行访问的有效方法

  12. 12

    如何将二进制文件安装到NixOS中

  13. 13

    如何将列中的二进制数据转换为文件?

  14. 14

    如何将原始二进制数组数据加载到Julia中并显示出来?

  15. 15

    如何将二进制文件添加到现有的PPA包中

  16. 16

    如何将结构数组的二进制副本写入文件

  17. 17

    如何将* .o目标文件链接到内核二进制文件中

  18. 18

    文件流将十六进制文件读入二进制缓冲区

  19. 19

    将二进制文件读入MIPS中的数组

  20. 20

    如何将数据插入已编译的MCU二进制文件中

  21. 21

    如何将二进制文件的内容放在c中的字符串中?

  22. 22

    将二进制文件读入int数组C ++

  23. 23

    在C ++中将二进制文件读入char数组

  24. 24

    如何将这个二进制乘法代码的答案带入二进制?

  25. 25

    如何将二进制文件读入数组

  26. 26

    swift3中更干净的方式将二进制读入Float

  27. 27

    将二进制文件读入std :: vector <bool>

  28. 28

    如何将所有二进制文件打包到 bazel 中?

  29. 29

    如何将二进制文件中的结构写入另一个二进制文件中的嵌套结构?

热门标签

归档