gpt4 book ai didi

java - 如何将我的字符串(表示十六进制值)转换为字节?

转载 作者:行者123 更新时间:2023-12-04 10:36:35 24 4
gpt4 key购买 nike

我在 Java 中有一个包含 32 个字符的字符串:

String tempHash = "123456789ABCDEF123456789ABCDEF12"; 

上面字符串中的每个字符代表一个十六进制值。我需要将它转换为另一个字符串,其中包含由上面字符串中的每个十六进制计算的 8 字节。所以在上面的例子中,输出字符串将是:
"00000001 00000010 00000011 000001000 000001001 000001011 ..."

我怎样才能做到这一点?

我试图做:
byte[] bytes1 = toByteArray(tempHash);

在哪里
public static byte[] toByteArray(String s) {
return DatatypeConverter.parseHexBinary(s);
}

但是当我遍历这个数组时:
for (byte singleByte: bytes1) {
System.out.println(singleByte);
}

对于第一个字符,我得到 18 而不是 00000001
我在这里有点失落。你能帮我解决这个问题吗?

最佳答案

一种解决方案是使用 Stream :

String tempHash = "123456789ABCDEF123456789ABCDEF12";

String binary = tempHash.chars() // Get stream of chars
.map(c -> Character.digit(c, 16)) // Convert to hex digit
.mapToObj(Integer::toBinaryString) // Convert to binary
.map(s -> "0".repeat(8 - s.length()) + s) // Pad left with zeros
.collect(Collectors.joining(" ")); // Collect to String

System.out.println(binary);

输出:
00000001 00000010 00000011 00000100 00000101 ...

正如 Kevin 在下面的 his comment 中指出的,Java 11 之前的解决方案是替换对 String#repeat 的调用:
String binary = tempHash.chars()              // Get stream of chars
.map(c -> Character.digit(c, 16)) // Convert to hex digit
.mapToObj(Integer::toBinaryString) // Convert to binary
.map(s -> new String(new char[8 - s.length()]).replace('\0', '0') + s) // Pad left with zeros
.collect(Collectors.joining(" ")); // Collect to String

关于java - 如何将我的字符串(表示十六进制值)转换为字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60153453/

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