gpt4 book ai didi

java - 使用 Java 将十六进制转储的字符串表示形式转换为字节数组?

转载 作者:行者123 更新时间:2023-12-02 10:50:10 28 4
gpt4 key购买 nike

我正在寻找一种将表示十六进制值的长字符串(来自转储)转换为字节数组的方法。

我无法比发帖者 the same question here 更好地表达它了.

但为了保持其原始性,我会用自己的方式表达它:假设我有一个字符串 "00A0BF" 我希望将其解释为

byte[] {0x00,0xA0,0xBf}

我该怎么办?

我是一名 Java 新手,最终使用了 BigInteger 并注意前导的十六进制零。但我认为它很丑陋,而且我确信我错过了一些简单的东西。

最佳答案

更新 (2021) - Java 17 现在包括 java.util.HexFormat (只花了25年):

HexFormat.of().parseHex(s)

<小时/>对于旧版本的 Java:

我认为这是一个比迄今为止发布的任何解决方案都要好的解决方案:

/* s must be an even-length string. */
public static byte[] hexStringToByteArray(String s) {
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));
}
return data;
}

改进的原因:

  • 使用前导零(与 BigInteger 不同)和负字节值(与 Byte.parseByte 不同)是安全的

  • 不会将 String 转换为 char[],或为每个字节创建 StringBuilder 和 String 对象。

  • 没有可能不可用的库依赖项

如果不知道参数是否安全,请随意通过 assert 添加参数检查或异常。

关于java - 使用 Java 将十六进制转储的字符串表示形式转换为字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29209428/

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