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

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

我正在寻找一种方法来转换长字符串(从转储),它表示十六进制值到一个字节数组。

我不能比在这里发布相同问题的人更好地措辞。

但为了保持原创,我会用自己的方式来表达它:假设我有一个"00A0BF"我想要解释为的字符串

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

我该怎么办?

我是Java新手,最后使用BigInteger并注意领先的十六进制零。但我觉得它很难看,我确信我错过了一些简单的东西。


开满天机
浏览 1518回答 4
4回答

慕少森

这是一个我认为比目前任何发布的解决方案更好的解决方案:public&nbsp;static&nbsp;byte[]&nbsp;hexStringToByteArray(String&nbsp;s)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;len&nbsp;=&nbsp;s.length(); &nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;data&nbsp;=&nbsp;new&nbsp;byte[len&nbsp;/&nbsp;2]; &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;len;&nbsp;i&nbsp;+=&nbsp;2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[i&nbsp;/&nbsp;2]&nbsp;=&nbsp;(byte)&nbsp;((Character.digit(s.charAt(i),&nbsp;16)&nbsp;<<&nbsp;4) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;Character.digit(s.charAt(i+1),&nbsp;16)); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;data;}这是一个改进的原因:带前导零的安全(与BigInteger不同)和负字节值(与Byte.parseByte不同)不将String转换为a&nbsp;char[],或为每个字节创建StringBuilder和String对象。没有可能不可用的库依赖项assert如果不知道参数是否安全,可以随意添加参数检查或异常。
打开App,查看更多内容
随时随地看视频慕课网APP