Hex到字节,ruby和java

时间:2017-09-13 12:43:46

标签: java ruby byte

我有以下代码将十六进制字符串转换为Java中的字节:

String s = "longhex";
int len = s.length();
byte[] data = new byte[(len / 2)];
for (int i = 0; i < len; i += 2)
{
    data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
}

这是在ruby中重现它的正确方法吗?

s = "longhex"
bytes = []
(0..s.length / 2 - 1).step(2).each do |i|
   bytes[i / 2] = s[i].ord << 4 + s[i + 1].ord
end

1 个答案:

答案 0 :(得分:1)

不,这不对。 <<的运算符优先级低于+。请注意,即使在java中,shift运算符周围也有括号。此外,它不是ruby,它是用几乎ruby语法编写的。

 str.codepoints.
     each_slice(2).
     map { |f, l| (f << 4) + l }

可能会做你想要的,但没有看到预期的结果,很难说。

Ilya的正确版本是:

str.scan(/.{1}/).
    each_slice(2).
    map { |f, l| (Integer(f,16) << 4) + Integer(l,16) }