【问题标题】:Prepend hex string to the content of binary file将十六进制字符串添加到二进制文件的内容中
【发布时间】:2019-06-26 13:09:35
【问题描述】:

我有这 2 个表示十六进制数字的数组,我想以二进制格式写入文件。

我转换成这样的十六进制字符串:

a=["A2","48","04","03","EE","72","B4","6B"]
b=["1A","28","18","06","07","00","11","86","05","01","01","01","A0"]

hex_string1 = a.map{|b| b.to_i(16)}.pack("C*")
hex_string2 = b.map{|b| b.to_i(16)}.pack("C*")

现在我想先将hex_string2 写入文件,然后将hex_string1 前置(偏移为“0”)。

我是这样处理的,但是输出不正确。

File.binwrite("outfile.bin",hex_string2)
File.binwrite("outfile.bin",hex_string1,0)

当前输出为:

A2 48 04 03 EE 72 B4 6B 05 01 01 01 A0

“output.bin”中的正确内容应该是这样的:

A2 48 04 03 EE 72 B4 6B 1A 28 18 06 07 00 11 86 05 01 01 01 A0

如何做到这一点?

【问题讨论】:

  • 为什么不将第一个字符串写入文件,然后附加第二个字符串?
  • 嗨伊万。这是一个逻辑问题。问题出在我的代码中,我在 foreach() 循环中生成了一个数组。数组最初是空的,但在循环中被填满,多次执行类似array << data 的操作,直到循环结束。如果我在foreach() 的开头设置array = a,则数组“a”的内容将多次附加到Array。如果我在 foreach() 循环之前设置 Array=a ,我会收到错误,因为 Array 不存在或被视为不同的数组。我希望有意义。但我认为解决方案就像你说的那样。
  • 说实话,我并没有完全理解你的评论,但是如果需要保持这种写字符串的顺序,为什么不写第二个字符串,偏移量为第一个字符串的大小:文件.binwrite("outfile.bin",hex_string2,hex_string1.size); File.binwrite("outfile.bin",hex_string1,0)

标签: ruby string file binary prepend


【解决方案1】:

你应该写第二个字符串,偏移量等于第一个字符串的大小:

File.binwrite("outfile.bin",hex_string2,hex_string1.size)
File.binwrite("outfile.bin",hex_string1,0)

在这种情况下,你会得到你想要的:

A2 48 04 03 EE 72 B4 6B 1A 28 18 06 07 00 11 86 05 01 01 01 A0

【讨论】:

    猜你喜欢
    • 2016-02-26
    • 2021-10-27
    • 2017-07-21
    • 2014-07-15
    • 2012-11-20
    • 2015-05-26
    • 2012-12-12
    • 1970-01-01
    相关资源
    最近更新 更多