我正在寻找一种方法将表示十六进制值的长字符串(来自转储)转换为字节数组。
我没有比在 这里发布相同问题 的人更好的措辞了。
但为了保持原汁原味,我会用自己的方式表达:假设我有一个字符串 "00A0BF"
我想将其解释为
byte[] {0x00,0xA0,0xBf}
我应该怎么办?
我是 Java 新手,最终使用了 BigInteger
并注意前导十六进制零。但我认为它很丑陋,而且我确信我遗漏了一些简单的东西。
原文由 rafraf 发布,翻译遵循 CC BY-SA 4.0 许可协议
更新(2021 年)- Java 17 现在包括
java.util.HexFormat
(只用了 25 年):HexFormat.of().parseHex(s)
对于旧版本的 Java:
这是我认为比目前发布的任何解决方案都更好的解决方案:
改进的原因:
使用前导零(与 BigInteger 不同)和负字节值(与 Byte.parseByte 不同)是安全的
不将 String 转换为
char[]
,或为每个字节创建 StringBuilder 和 String 对象。没有可能不可用的库依赖项
随意通过
assert
添加参数检查,或者如果参数未知是安全的则例外。