为什么要把带负号的十六进制字符串转成byte字节数组,是因为我要通过转成的byte字节数组发送给对方。对方会通过将byte字节数组转成十六进制,然后十六进制转成十进制显示。
0107000000600200000001000C00000004000000010D000000040046001F0E00000004000620020F0000000400099CF0100000000400099CF0110000000203411400000002004E120000000200641300000004000992401600000001001700000004**-0000bb8** 这段十六进制我如果想转成byte字节数组 那我怎么保存住那个负号还在 。 现在问题是 我这个负号每次转成byte的时候都变为0了。
/**
* desc:将16进制的数据转为数组
*
* @param data
* @return byte[]
*/
public static byte[] StringToBytes(String data) {
String hexString = data.toUpperCase().trim();
if (hexString.length() % 2 != 0) {
return null;
}
byte[] retData = new byte[hexString.length() / 2];
for (int i = 0; i < hexString.length(); i++) {
int int_ch; // 两位16进制数转化后的10进制数
char hex_char1 = hexString.charAt(i); ////两位16进制数中的第一位(高位*16)
int int_ch3;
if (hex_char1 >= '0' && hex_char1 <= '9')
int_ch3 = (hex_char1 - 48) * 16; //// 0 的Ascll - 48
else if (hex_char1 >= 'A' && hex_char1 <= 'F')
int_ch3 = (hex_char1 - 55) * 16; //// A 的Ascll - 65
else
return null;
i++;
char hex_char2 = hexString.charAt(i); ///两位16进制数中的第二位(低位)
int int_ch4;
if (hex_char2 >= '0' && hex_char2 <= '9')
int_ch4 = (hex_char2 - 48); //// 0 的Ascll - 48
else if (hex_char2 >= 'A' && hex_char2 <= 'F')
int_ch4 = hex_char2 - 55; //// A 的Ascll - 65
else
return null;
int_ch = int_ch3 + int_ch4;
retData[i / 2] = (byte) int_ch;//将转化后的数放入Byte里
}
return retData;
}