在Ruby中,如何将包含整数数组的字符串作为字节写入文件?

在Ruby中,如何将包含整数数组的字符串作为字节写入文件?,ruby,file-io,io,bytearray,Ruby,File Io,Io,Bytearray,如何将二进制字符串数组表示形式写入(原始)文件 #str is a String not an Array str = "[80, 75, 3, 4, 10, 0, 0, 0, 0, 0, -74, 121, 57, 64, 0, 0, 0, 0]" File.open('/Users/file.zip', "wb") do |file| file.write(str) end 上面的代码不起作用。如何修复它?数组#打包和字符串#解包转换为二进制字符串并返回。对这些字符串使用IO#wr

如何将二进制字符串数组表示形式写入(原始)文件

#str is a String not an Array
str = "[80, 75, 3, 4, 10, 0, 0, 0, 0, 0, -74, 121, 57, 64, 0, 0, 0, 0]"

File.open('/Users/file.zip', "wb") do |file|
   file.write(str)
end
上面的代码不起作用。如何修复它?

数组#打包
字符串#解包
转换为二进制字符串并返回。对这些字符串使用
IO#write
IO#read

确实要吗

str = "[80, 75, 3, 4, 10, 0, 0, 0, 0, 0, -74, 121, 57, 64, 0, 0, 0, 0]"
而不是

str = [80, 75, 3, 4, 10, 0, 0, 0, 0, 0, -74, 121, 57, 64, 0, 0, 0, 0]
关于写入:
#write
调用
#to_s
,将数组转换为字符串表示形式,这不是您想要的。要控制该转换,请使用。尝试
file.write(str.pack('C*'))

行得通,但我觉得太脏了


这里的大多数答案都假设您使用的是数组,而不是您所说的字符串(如示例所示)。这应该适用于示例中显示的字符串:

File.open('/Users/file.zip', "wb") { |f| f.write(JSON.parse(str).pack('C*')) }

只要确保
需要“json”

我想知道为什么没有人提到字符串转义。这项工作:

str = "\x50\x4B\x03\x04\x0A\0\0\0\0\0\xB6\x79\x39\x40\0\0\0\0"    
File.open('file.zip', "wb") { |file| file.write(str) }

不幸的是,没有十进制转义符,因此您必须将数字转换为十六进制或八进制。

我猜这就是您要搜索的:(pack/unpack方法)。str是字符串,因此如果我这样做,我会得到NoMethodError(未定义的#方法'pack'):使用
JSON.parse(str)会更安全
而不是
eval(str)
以防字符串包含一些危险的代码,如
system('rm-rf/')
,因为这是数组的有效json表示形式。非常感谢!请用JSON.parse(str)更新拯救生命的主要答案。。。
str = "\x50\x4B\x03\x04\x0A\0\0\0\0\0\xB6\x79\x39\x40\0\0\0\0"    
File.open('file.zip', "wb") { |file| file.write(str) }