目录
2.1Java中的数组都是从左到右读取数据,索引位置从左侧0开始,(0,1,2....)
3.1Java中的byte和c中的unsigned char *str转换问题
3.1.2Java中byte转为unsigned char *str
3.1.2c++中unsigned char *str转为Java中的byte
1.Java中int或long类型和HEX转换
1.1int或long类型转换十六进制字符串格式说明
String.format("%02X ", 90)
数据格式解析:
02表示两位组成的十六进制
%02X:格式化为一字节大写的十六进制,转为结果是5A
%02x:格式化为一字节小写的十六进制,转为结果是5a
String.format("%08X ", 90)
08表示8位组成的十六进制
%08X:格式化为四字节大写的十六进制,转为结果是0000005A
%08x:格式化为四字节大写的十六进制,转为结果是0000005a
具体格式化格式根据自己需要处理即可;
1.2HEX字符串转为int或者long类型值
long result = Long.parseLong("0000005a", 16);
result = 90;
参数说明:
(要解析的对应进制数据可以是十六进制或其他, 对应的进制)
int result = Integer.parseInt("0000005a", 16)
参数说明:
(要解析的对应进制数据可以是十六进制或其他, 对应的进制)
React和Java之间实现数据汽车Can数据交互统一采用十六进制方式处理;
2.Java中字节和比特位读取顺序理解
2.1Java中的数组都是从左到右读取数据,索引位置从左侧0开始,(0,1,2....)
int[] data = new int[5]{23,12,34,45,56};对应的数据顺序data[0]=23,....data[4]=56;
2.2bit位都是从右侧读取开始位
01010111八个bit位,读取顺序bit7=,bit6=1,bit5=0,bit4=1,bit3=0,bit2=1,bit1=1,bit0=1
2.2.1JS实现了每个字节从左到右读取
//调用每个字节数据处理将bit位转为从左到右读取
paramsValue = paramsValue.concat(Tools.hex_to_binEveryByte('A0'));
/**
* 在数据场中,一个信息帧可以包括 8 个字节数据,bit7(字节 1 的最高位)会被首先传输,
* 然后 是 bit 6,以此类推,bit 56(字节 8 的最低位)最后传输。见下表。
*1 7 6 5 4 3 2 1 0
*2 15 14 13 12 11 10 9 8
*/
/**
* 十六进制转二进制,每次只处理一字节,转换后调整数据顺序
* @param str
* @returns {string}
*/
static hex_to_binEveryByte(str) {
let hex_array = [{key: 0, val: "0000"}, {key: 1, val: "0001"}, {key: 2, val: "0010"}, {
key: 3,
val: "0011"
}, {key: 4, val: "0100"}, {key: 5, val: "0101"}, {key: 6, val: "0110"}, {key: 7, val: "0111"},
{key: 8, val: "1000"}, {key: 9, val: "1001"}, {key: 'A', val: "1010"}, {key: 'B', val: "1011"}, {
key: 'C',
val: "1100"
}, {key: 'D', val: "1101"}, {key: 'E', val: "1110"}, {key: 'F', val: "1111"}];
let value = ""
for (let i = 0; i < str.length; i++) {
for (let j = 0; j < hex_array.length; j++) {
if (str.charAt(i) == hex_array[j].key) {
value = value.concat(hex_array[j].val);
break
}
}
}
console.log(value);
//二进制字节从右侧开始读取,将二进制字节调整顺序
let contraryValue = "";
for(let l=value.length-1; l>=0; l--){
contraryValue = contraryValue.concat(value[l]);
}
return contraryValue
}
转换后的结果:00000101