一次将十进制转换为十六进制 2 位 Ruby

convert decimal to hexidecimal 2 digits at a time Ruby

我正在尝试将一串十进制值转换为十六进制,一次获取两位数字

例如,如果我一次将这些小数转换为两位数

01 67 15 06 01 76 61 73

这就是我的结果

01430F06014C3D49

我知道 str.to_s(16) 会将十进制转换为十六进制,但就像我说的,我需要一次完成两位数,这样输出是正确的,但我不知道如何在 [=25 中执行此操作=]

这是我试过的

str.upcase.chars.each_slice(2).to_s.(16).join

您可以使用 String#gsub with a regular expression and Kernel#sprintf:

"01 67 15 06 01 76 61   73".gsub(/\d{2} */) { |s| sprintf("%02x", s.to_i) } 
  #=> "01430f06014c3d49"

正则表达式/\d{2} */)匹配两个数字后跟零个或多个spaces(注意73后不跟space)。

块计算的结果替换正则表达式匹配的两个或三个字符。

sprintf 的格式化指令形成一个字符串,其中包含 2 个字符,如果需要,用 '0' 填充到左侧,并将整数的字符串表示形式转换为以 10 为基数到以 16 为基数的整数的字符串表示形式 ('x').

或者,可以使用 String#%(使用 sprintf 的格式指令):

"01 67 15 06 01 76 61   73".gsub(/\d{2} */) { |s| "%02x" % s.to_i } 
  #=> "01430f06014c3d49"