请问:十六进制字符串String s = “FFFF0D0110E00500020400AA009BAAAA”,
我怎么可以转换成这样: byte[] buffer_5 =new byte[]{(byte) 0xFF,(byte) 0xFF,0x02,0x0D,0x01,0x10, (byte) 0xE0,0x05,0x00,0x02, 0x04,0x00,(byte) 0xAA, 0x00, (byte) 0x9B, (byte) 0x9B, (byte) 0xDF, (byte) 0xAA,(byte) 0xAA};
因为我在发报文的时候,必须是这样的形式,谢谢指点!
so easy 16进制字符串转10进制字节数组就可以,你用这个就行
public static byte[] hexStringToBytes(String hexString) {
if (hexString == null || hexString.equals("")) {
return null;
}
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
return d;
}
就是楼上的代码··············
不行小哥! 我在发送报文的时候是发送一个字节数组对象,像这样正确的形式:
final byte[] buffer_14 =new byte[]{(byte) 0xFF,(byte) 0xFF,0x01,0x03,0x51,0x31,0x0D,(byte) 0xAA,(byte) 0xAA};
mUARTInterface.send(buffer_14);
所以,数组的后面的这些数据,硬件工程师说必须这样!所以,我现在的字符串就是需要转换成这样形式,请指点,谢谢
public static byte[]/*int[]*/ keyStoInt(String keyIn){
int keyOuttmp=0;
byte[]keyOut=new byte[keyIn.length()/2];
//
int j=0;
for(int i=0;i if(keyIn.charAt(i)>=97)
keyOuttmp=keyOuttmp*16*(i%2)+(keyIn.charAt(i)-'a'+10);
else if(keyIn.charAt(i)>=65)
keyOuttmp=keyOuttmp*16*(i%2)+(keyIn.charAt(i)-'A'+10);
else if(keyIn.charAt(i)>=47)
keyOuttmp=keyOuttmp*16*(i%2)+(keyIn.charAt(i)-'0');
else ;
if(i%2==1){
keyOut[j]=(byte) keyOuttmp;
j++;
}
}
return keyOut;
}
//======0xFF 放在byte 里面是 -1。[-1, -1, 13, 1, 16, -32, 5, 0, 2, 4, 0, -86, 0, -101, -86, -86]你确定?一般通信用ASCII码
你这样 FF改为'0''x''F''F',16进制转ascll方法我有实现,最大255可以表示ff