开发ble,研究string与byte的互转
/**
* byte[]转十六进制String
*
* @param byteArray
* @return
*/
public static String byteArrayToHexStr(byte[] byteArray) {
if (byteArray == null) {
return null;
}
char[] hexArray = "0123456789ABCDEF".toCharArray();
char[] hexChars = new char[byteArray.length * 2];
for (int j = 0; j < byteArray.length; j++) {
int v = byteArray[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
/**
* 十六进制String转byte[]
*
* @param str
* @return
*/
public static byte[] hexStrToByteArray(String str) {
if (str == null) {
return null;
}
if (str.length() == 0) {
return new byte[0];
}
byte[] byteArray = new byte[str.length() / 2];
for (int i = 0; i < byteArray.length; i++) {
String subStr = str.substring(2 * i, 2 * i + 2);
byteArray[i] = ((byte) Integer.parseInt(subStr, 16));
}
return byteArray;
}
2019.2.21
研究String、byte、int之间的互相转换
public static void main(String[] args) {
System.out.println("============================ string byte 互转 start ================================");
byte[] bytes = new byte[]{0X0F, 0x04, 0x02, 0X00};
System.out.println("bytes :" + Arrays.toString(bytes));
String s = byteArrayToHexStr(bytes);
System.out.println("byte to string:" + s);
byte[] bytes2 = hexStringToByteArray("03");
System.out.println("byte:" + Arrays.toString(bytes2));
System.out.println("byte to string:" + byteArrayToHexStr(bytes2));
System.out.println("============================ test ================================");
byte[] bs = hexStringToByteArray("0F0402000104FFFF");
System.out.println(Arrays.toString(bs));
System.out.println("---------------------------------------");
byte[] bytes4 = new byte[6];
bytes4[0] = 0X0F;
bytes4[1] = 0X04;
bytes4[2] = 0X02;
bytes4[3] = 0X00;
bytes4[4] = 0X01;
bytes4[5] = 0X04;
System.out.println(Arrays.toString(bytes4));
System.out.println("---------------------------------------");
bytes4[bytes4.length - 1] = checkSum(bytes4);
bytes4[1] = (byte) (bytes4.length - 2);
System.out.println("length :" + (bytes4.length - 2));
System.out.println(Arrays.toString(bytes4));
System.out.println("--------------------------------------");
byte[] bytes5 = hexStringToByteArray("0F65010001050A001414001E1E00282800320A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A28");
System.out.println(Arrays.toString(bytes5));
checkSum(bytes5);
bytes5[1] = (byte) (bytes5.length - 2);
System.out.println("length :" + (bytes5.length - 2));
System.out.println("---------------------------------------");
String content = "4";
System.out.println("原字符串:" + content);
String hex2Str = conver2HexStr(content.getBytes());
System.out.println("\n转换为二进制的表示形式:" + hex2Str);
byte[] b = conver2HexToByte(hex2Str);
System.out.println("二进制字符串还原:" + new String(b));
String hex16Str = conver16HexStr(content.getBytes());
System.out.println("\n转换为十六进制的表示形式:" + hex16Str);
System.out.println("十六进制字符串还原:" + new String(conver16HexToByte(hex16Str)));
}
public static byte checkSum(byte[] bytes4) {
byte sum = 0;
for (int i = 2; i < bytes4.length - 1; i++) {
sum += bytes4[i];
}
sum += 0X01;
System.out.println("checkSum:" + sum);
return sum;
}
/**
* 将String转换为byte[]
*
* @param s String
* @return byte[]
*/
public 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;
}
/**
* byte[]转十六进制String
*
* @param byteArray
* @return
*/
public static String byteArrayToHexStr(byte[] byteArray) {
if (byteArray == null) {
return null;
}
char[] hexArray = "0123456789ABCDEF".toCharArray();
char[] hexChars = new char[byteArray.length * 2];
for (int j = 0; j < byteArray.length; j++) {
int v = byteArray[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
/**
* byte数组转换为二进制字符串,每个字节以","隔开
**/
public static String conver2HexStr(byte[] b) {
StringBuffer result = new StringBuffer();
for (int i = 0; i < b.length; i++) {
result.append(Long.toString(b[i] & 0xff, 2) + ",");
}
return result.toString().substring(0, result.length() - 1);
}
/**
* 二进制字符串转换为byte数组,每个字节以","隔开
**/
public static byte[] conver2HexToByte(String hex2Str) {
String[] temp = hex2Str.split(",");
byte[] b = new byte[temp.length];
for (int i = 0; i < b.length; i++) {
b[i] = Long.valueOf(temp[i], 2).byteValue();
}
return b;
}
/**
* byte数组转换为十六进制的字符串
**/
public static String conver16HexStr(byte[] b) {
StringBuffer result = new StringBuffer();
for (int i = 0; i < b.length; i++) {
if ((b[i] & 0xff) < 0x10)
result.append("0");
result.append(Long.toString(b[i] & 0xff, 16));
}
return result.toString().toUpperCase();
}
/**
* 十六进制的字符串转换为byte数组
**/
public static byte[] conver16HexToByte(String hex16Str) {
char[] c = hex16Str.toCharArray();
byte[] b = new byte[c.length / 2];
for (int i = 0; i < b.length; i++) {
int pos = i * 2;
b[i] = (byte) ("0123456789ABCDEF".indexOf(c[pos]) << 4 | "0123456789ABCDEF".indexOf(c[pos + 1]));
}
return b;
}
该代码示例展示了如何在Java中进行byte数组与十六进制字符串之间的转换,以及涉及的String与byte数组的转换方法。主要函数包括byteArrayToHexStr、hexStrToByteArray,同时有对数据的校验和处理过程。
1262

被折叠的 条评论
为什么被折叠?



