gpt4 book ai didi

java - 十六进制到字节,ruby 和 java

转载 作者:太空宇宙 更新时间:2023-11-03 16:15:29 24 4
gpt4 key购买 nike

我有以下代码在 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

最佳答案

不,这是不正确的。 <<运算符优先级低于 + .请注意,即使在 Java 中,移位运算符也有括号。另外,它不是 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) }

关于java - 十六进制到字节,ruby 和 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46197946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com