在Ruby中将字符串转换为hex

我正在尝试使用Ruby将二进制文件转换为hex。

目前我有以下内容:

File.open(out_name, 'w') do |f| f.puts "const unsigned int modFileSize = #{data.length};" f.puts "const char modFile[] = {" first_line = true data.bytes.each_slice(15) do |a| line = a.map { |b| ",#{b}" }.join if first_line f.puts line[1..-1] else f.puts line end first_line = false end f.puts "};" end 

这是以下代码生成的内容:

 const unsigned int modFileSize = 82946; const char modFile[] = { 116, 114, 97, 98, 97, 108, 97, 115, 104, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 62, 62, 62, 110, 117, 107, 101, 32, 111, 102 , 32, 97, 110, 97, 114, 99, 104, 121, 60, 60, 60, 8, 8, 130, 0 }; 

我需要的是以下内容:

 const unsigned int modFileSize = 82946; const char modFile[] = { 0x74, 0x72, etc, etc }; 

所以我需要能够将字符串转换为hex值。

"116" => "0x74"

提前致谢。

改变这一行:

 line = a.map { |b| ", #{b}" }.join 

对此:

 line = a.map { |b| sprintf(", 0x%02X",b) }.join 

(如果需要,更改为%02x ,从示例中不清楚hex数字是否应该大写。)

Ruby 1.9添加了一种更简单的方法: "0x101".hex将字符串中的数字作为hex数字返回。

我不知道这是否是最佳解决方案,但这是一个解决方案:

 class String def to_hex "0x" + self.to_i.to_s(16) end end "116".to_hex => "0x74" 

四种语言 (包括Ruby)的二进制到hex转换可能会有所帮助。

该页面上的评论之一似乎提供了一个非常简单的捷径。 该示例涵盖从STDIN读取输入,但任何字符串表示应该执行:

 STDIN.read.to_i(base=16).to_s(base=2) 

对于另一种方法,请检查解压缩