将字节转换为十六进制的Java代码

将字节转换为十六进制的Java代码

我有一个字节数组。我希望将该数组的每个字节字符串转换为相应的十六进制值。

Java中是否有将字节数组转换为十六进制的函数?



翻过高山走不出你
浏览 786回答 3
3回答

慕虎7371278

这个最快我发现这样做的方法如下:private&nbsp;static&nbsp;final&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;HEXES&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;"0123456789ABCDEF";static&nbsp;String&nbsp;getHex(byte[]&nbsp;raw)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;StringBuilder&nbsp;hex&nbsp;=&nbsp;new&nbsp;StringBuilder(2&nbsp;*&nbsp;raw.length); &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(final&nbsp;byte&nbsp;b&nbsp;:&nbsp;raw)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hex.append(HEXES.charAt((b&nbsp;&&nbsp;0xF0)&nbsp;>>&nbsp;4)).append(HEXES.charAt((b&nbsp;&&nbsp;0x0F))); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;hex.toString();}比它快50倍String.format..如果您想测试它:public&nbsp;class&nbsp;MyTest{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;final&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;HEXES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;"0123456789ABCDEF"; &nbsp;&nbsp;&nbsp;&nbsp;@Test &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;test_get_hex()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;raw&nbsp;=&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(byte)&nbsp;0xd0,&nbsp;(byte)&nbsp;0x0b,&nbsp;(byte)&nbsp;0x01,&nbsp;(byte)&nbsp;0x2a,&nbsp;(byte)&nbsp;0x63, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(byte)&nbsp;0x78,&nbsp;(byte)&nbsp;0x01,&nbsp;(byte)&nbsp;0x2e,&nbsp;(byte)&nbsp;0xe3,&nbsp;(byte)&nbsp;0x6c, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(byte)&nbsp;0xd2,&nbsp;(byte)&nbsp;0xb0,&nbsp;(byte)&nbsp;0x78,&nbsp;(byte)&nbsp;0x51,&nbsp;(byte)&nbsp;0x73, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(byte)&nbsp;0x34,&nbsp;(byte)&nbsp;0xaf,&nbsp;(byte)&nbsp;0xbb,&nbsp;(byte)&nbsp;0xa0,&nbsp;(byte)&nbsp;0x9f, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(byte)&nbsp;0xc3,&nbsp;(byte)&nbsp;0xa9,&nbsp;(byte)&nbsp;0x00,&nbsp;(byte)&nbsp;0x1e,&nbsp;(byte)&nbsp;0xd5, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(byte)&nbsp;0x4b,&nbsp;(byte)&nbsp;0x89,&nbsp;(byte)&nbsp;0xa3,&nbsp;(byte)&nbsp;0x45,&nbsp;(byte)&nbsp;0x35, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(byte)&nbsp;0xd6,&nbsp;(byte)&nbsp;0x10, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;N&nbsp;=&nbsp;77777; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;t; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;System.currentTimeMillis(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;N;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;StringBuilder&nbsp;hex&nbsp;=&nbsp;new&nbsp;StringBuilder(2&nbsp;*&nbsp;raw.length); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(final&nbsp;byte&nbsp;b&nbsp;:&nbsp;raw)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hex.append(HEXES.charAt((b&nbsp;&&nbsp;0xF0)&nbsp;>>&nbsp;4)).append(HEXES.charAt((b&nbsp;&&nbsp;0x0F))); &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;&nbsp;&nbsp;hex.toString(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(System.currentTimeMillis()&nbsp;-&nbsp;t);&nbsp;//&nbsp;50 &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;t&nbsp;=&nbsp;System.currentTimeMillis(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;N;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;hex&nbsp;=&nbsp;new&nbsp;StringBuilder(2&nbsp;*&nbsp;raw.length); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(byte&nbsp;b&nbsp;:&nbsp;raw)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hex.append(String.format("%02X",&nbsp;b)); &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;&nbsp;&nbsp;hex.toString(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(System.currentTimeMillis()&nbsp;-&nbsp;t);&nbsp;//&nbsp;2535 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}编辑:只是找到了一些更快一点的东西,它可以保持一条线,但是不兼容和JRE 9。自担风险import&nbsp;javax.xml.bind.DatatypeConverter;DatatypeConverter.printHexBinary(raw);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java