Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 解包包含重复的二进制文件_Ruby_Binaryfiles - Fatal编程技术网

Ruby 解包包含重复的二进制文件

Ruby 解包包含重复的二进制文件,ruby,binaryfiles,Ruby,Binaryfiles,我有一个二进制文件,它将数字存储为两个无符号32位整数和一个无符号8位整数的重复。我将此文件作为字符串读取,并希望将其解码为一个数组,每个数组包含三个数字。所以我这样做: File.open("file", "r"){|f| f.read.unpack("LLC")} 但是,这不起作用,因为它只处理文件中的前三个数字。这也不起作用: File.open("file", "r"){|f| f.read.unpack("LLC*")} 因为它将文件的其余部分解析为8位整数,并且不创建数组数组。这

我有一个二进制文件,它将数字存储为两个无符号32位整数和一个无符号8位整数的重复。我将此文件作为字符串读取,并希望将其解码为一个数组,每个数组包含三个数字。所以我这样做:

File.open("file", "r"){|f| f.read.unpack("LLC")}
但是,这不起作用,因为它只处理文件中的前三个数字。这也不起作用:

File.open("file", "r"){|f| f.read.unpack("LLC*")}
因为它将文件的其余部分解析为8位整数,并且不创建数组数组。这不太重要,因为我可以手动完成,但我必须重复LLC模式。

尝试以下操作:

File.open("file", "rb") { |f|
  result = []
  while true
    data = f.read(9)
    break unless data && data.length == 9
    result << data.unpack('LLC')
  end
  result
}

请尝试以下操作:

File.open("file", "rb") { |f|
  result = []
  while true
    data = f.read(9)
    break unless data && data.length == 9
    result << data.unpack('LLC')
  end
  result
}


这篇文章的回答是“f.read.unpack('LLC*)。每一片(3)。到”。这是一个很好的答案,正是我所需要的;请把答案还给我,这样我就可以投赞成票了。给出错误的结果。例如,
“\x01\x00\x00\x00\x02\x00\x00\x00\x03\x04\x00\x00\x05\x00\x00\x00\x00\x00\x00\x06”。解包('L*L*C*')。每个_片(3)。到_a
产生
[1,2,1027],[1280,0,6]
,而我期望
[1,2,3],[4,5,6]
。(假设小恩迪安)这很奇怪,因为对我来说它起作用了。这篇文章的答案是“f.read.unpack('LLC*)。每个片段(3)到a”。这是一个很好的答案,正是我所需要的;请把答案还给我,这样我就可以投赞成票了。给出错误的结果。例如,
“\x01\x00\x00\x00\x02\x00\x00\x00\x03\x04\x00\x00\x05\x00\x00\x00\x00\x00\x00\x06”。解包('L*L*C*')。每个_片(3)。到_a
产生
[1,2,1027],[1280,0,6]
,而我期望
[1,2,3],[4,5,6]
。(假设小恩迪安)这很奇怪,因为对我来说它起作用了。是什么导致了这种差异?
"\x01\x00\x00\x00\x02\x00\x00\x00\x03\x04\x00\x00\x00\x05\x00\x00\x00\x06".chars.each_slice(9).map { |chs| chs.join.unpack("LLC") }
# => [[1, 2, 3], [4, 5, 6]]