【问题标题】:How to write binary into file in Crystal如何在 Crystal 中将二进制文件写入文件
【发布时间】:2016-02-06 22:49:07
【问题描述】:

我有一个 UInt32 数组,用 Crystal lang 将它写入二进制文件的最有效方法是什么?

现在我正在使用IO#write_byte(byte : UInt8) 方法,但我相信应该有一种方法可以写入比每一个字节更大的块。

【问题讨论】:

  • 你是如何用 UInt8 编写 UInt32 的?您的意思是您使用的是 write_bytes(末尾带有 s)?
  • 目前我正在保留 UInt8 数组并编写 UInt8。但我想保留 UInt32 数组并将其用于写作会更好

标签: file binary crystal-lang


【解决方案1】:

可以直接向任意IO写入Slice(UInt8),应该比逐个迭代逐个字节逐个写入要快。

诀窍是将Array(UInt32) 的内部缓冲区作为Pointer(UInt8) 访问,然后将其设为Slice(UInt8),这可以通过一些不安全的代码来实现:

array = [1_u32, 2_u32, 3_u32, 4_u32]

File.open("out.bin", "w") do |f|
  ptr = (array.to_unsafe as UInt8*)
  f.write ptr.to_slice(array.size * sizeof(UInt32))
end

请务必永远不要保留对 ptr 的引用,有关详细信息,请参阅 Array#to_unsafe

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多