一次将十进制转换为十六进制 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"
我正在尝试将一串十进制值转换为十六进制,一次获取两位数字
例如,如果我一次将这些小数转换为两位数
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"