json字符串与16进制字符串的转换工具类
public class BinaryConversionUtil {
public static void main(String[] args) {
// json字符串转为16进制字符串
JSONObject jsonObject = new JSONObject();
jsonObject.put("cmd", "auth");
jsonObject.put("deviceId", "123456");
jsonObject.put("token", "1");
jsonToHexString(jsonObject);
// 16进制字符串转为ascii码字符串
String hexString = "7B 22 63 6F 64 65 22 3A 31 2C 22 63 6D 64 22 3A 22 65 72 72 6F 72 22 7D";
hexStringToString(hexString);
}
/**
* json字符串转为16进制字符串
* @param jsonObject
*/
public static void jsonToHexString(JSONObject jsonObject){
byte[] byteArray = jsonObject.toJSONString().getBytes(StandardCharsets.UTF_8);
System.out.println("字节数组长度:" + Integer.toHexString(byteArray.length));
// 遍历字节数组,并打印每个字节的十六进制表示
for (byte b : byteArray) {
// 将字节转换为无符号的十六进制字符串,并确保其为两位
String hexString = String.format("%02x", b & 0xFF);
System.out.print(hexString + " ");
}
// 输出换行,以便结果更清晰
System.out.println();
}
/**
* 16进制字符串转为ascii码字符串
* @param hexString
*/
public static void hexStringToString(String hexString) {
// 将十六进制字符串分割并转换为字节数组
byte[] byteArray = hexStringToByteArray(hexString.replace(" ", ""));
// 将字节数组转换为ASCII字符串
String asciiString = new String(byteArray, StandardCharsets.US_ASCII);
System.out.println(asciiString);
}
// 辅助方法:将十六进制字符串转换为字节数组
private 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;
}
}
将两个字节合并为int类型
/**
* 先读取高位字节再读取低位字节。
* @param high
* @param low
* @return
*/
private static int mergeByte2Hex(byte high, byte low) {
return (high << 8) | (low & 0xFF);
}
将如下格式的十六进制字符串转换为 byte 数组
例.“B4 2E 3F”
方法一
public class HexStringToByteArray {
public static void main(String[] args) {
String hexString = "B4 2E 3F";
// 去除空格
hexString = hexString.replaceAll(" ", "");
byte[] data = new byte[hexString.length() / 2];
for (int i = 0; i < hexString.length(); i += 2) {
data[i / 2] = (byte) Integer.parseInt(hexString.substring(i, i + 2), 16);
}
// 打印字节数组
for (byte b : data) {
System.out.printf("%02X ", b);
}
}
}
方法二:使用 Apache Commons Codec 库
添加以下 Maven 依赖:
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
import org.apache.commons.codec.binary.Hex;
public class HexStringToByteArrayUsingCodec {
public static void main(String[] args) {
String hexString = "B4 2E 3F";
hexString = hexString.replaceAll(" ", "");
byte[] data = Hex.decodeHex(hexString);
for (byte b : data) {
System.out.printf("%02X ", b);
}
}
}
使用 ByteBuffer向 byte[] 数组中添加元素
import java.nio.ByteBuffer;
public class ByteArrayAppendWithByteBuffer {
public static void main(String[] args) {
byte[] originalBytes = {1, 2, 3};
byte[] newBytes = {4, 5, 6};
ByteBuffer buffer = ByteBuffer.allocate(originalBytes.length + newBytes.length);
buffer.put(originalBytes);
buffer.put(newBytes);
byte[] result = buffer.array();
// 打印结果
for (byte b : result) {
System.out.print(b + " ");
}
}
}