【发布时间】: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