文章目录
- BytesToAscii
- AsciiToBytes
- 10进制和16进制byte对比
- bytes2HexString和hexStringToBytes
- 测试
BytesToAscii
@Testpublic void convertBytesToAscii() {byte[] bytes = new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35 };String asciiString = new String(bytes);System.out.println("asciiString = " + asciiString);}
asciiString = 12345
AsciiToBytes
@Testpublic void convertAsciiToBytes() {String asciiString = "12345";byte[] result = new byte[asciiString.length()];for (int i = 0; i < asciiString.length(); i++) {result[i] = (byte) asciiString.charAt(i);}System.out.println("result = " + Arrays.toString(result));}
result = [49, 50, 51, 52, 53]
由于 Arrays.toString()
默认输出的是十进制,二前面我们输入的是十六进制,这样看起来不太顺眼。所以换一个输出:
public static String byteArrayToHexString(byte[] bytes) {StringBuilder hexString = new StringBuilder();for (byte b : bytes) {hexString.append(String.format("%02X", b));}return hexString.toString();}
result = 3132333435
10进制和16进制byte对比
public void compareBytes() {byte b1 = 0x31;byte b2 = 49;System.out.println("b1 = " + b1);System.out.println("b2 = " + b2);System.out.println("compare b1 b2 = " + (b1 == b2));byte[] bytes1 = new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35 };byte[] bytes2 = new byte[] { 49, 50, 51, 52, 53 };System.out.println("bytes1 = " + Arrays.toString(bytes1));System.out.println("bytes2 = " + Arrays.toString(bytes2));System.out.println("compare bytes1 bytes2 = " + (bytes1 == bytes2));}
b1 = 49
b2 = 49
compare b1 b2 = true
bytes1 = [49, 50, 51, 52, 53]
bytes2 = [49, 50, 51, 52, 53]
compare bytes1 bytes2 = false
bytes2HexString和hexStringToBytes
private static final byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(StandardCharsets.US_ASCII);/*** convert byte array to hex string* 0x31, 0x32, 0x33, 0x34, 0x35, 0x36 -> "313233343536"*/public static String bytes2HexString(byte[] bytes) {byte[] hexChars = new byte[bytes.length * 2];for (int j = 0; j < bytes.length; j++) {int v = bytes[j] & 0xFF;hexChars[j * 2] = HEX_ARRAY[v >>> 4];hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];}return new String(hexChars, StandardCharsets.UTF_8);}
/*** convert byte array to hex string* "313233343536" -> 0x31, 0x32, 0x33, 0x34, 0x35, 0x36*/public static byte[] hexStringToBytes(String hexstr) {int len = (hexstr.length() / 2);byte[] result = new byte[len];char[] achar = hexstr.toCharArray();for (int i = 0; i < len; i++) {int pos = i * 2;result[i] = (byte) (((byte) "0123456789ABCDEF".indexOf(achar[pos])) << 4| (((byte) "0123456789ABCDEF".indexOf(achar[pos + 1]))) & 0xff);}return result;}
测试
@Testpublic void bytes2Hex() {byte[] bytes = new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35 };System.out.println("bytes = " + Arrays.toString(bytes));String bytes2HexString = ConvertUtils.bytes2HexString(bytes);System.out.println("bytes2HexString = " + bytes2HexString);byte[] hexStringToBytes = ConvertUtils.hexStringToBytes(bytes2HexString);System.out.println("hexStringToBytes = " + Arrays.toString(hexStringToBytes));}
bytes = [49, 50, 51, 52, 53]
bytes2HexString = 3132333435
hexStringToBytes = [49, 50, 51, 52, 53]