汽车CAN通信基础知识-数据类型(Java,C,JS之间转换)

目录1.Java中int或long类型和HEX转换1.1int或long类型转换十六进制字符串格式说明1.2HEX字符串转为int或者long类型值2.Java中字节和比特位读取顺序理解2.1Java中的数组都是从左到右读取数据,索引位置从左侧0开始,(0,1,2....)2.2bit位都是从右侧读取开始位2.2.1JS实现了每个字节从左到右读取2.2.2J...
摘要由CSDN通过智能技术生成

目录

 

1.Java中int或long类型和HEX转换

1.1int或long类型转换十六进制字符串格式说明 

1.2HEX字符串转为int或者long类型值

2.Java中字节和比特位读取顺序理解

2.1Java中的数组都是从左到右读取数据,索引位置从左侧0开始,(0,1,2....)

2.2bit位都是从右侧读取开始位

2.2.1JS实现了每个字节从左到右读取

2.2.2JS实现十六进制转为二进制,不考虑顺序调整

3.C语言下与Java各种数据类型转换

3.1Java中的byte和c中的unsigned char *str转换问题

3.1.2Java中byte转为unsigned char *str

3.1.2c++中unsigned char *str转为Java中的byte

3.2Java数据类型和C++中无符号的数据类型转换

3.3Java中的short和byte转换

3.4JS中十进制字符串和BCD数据类型转换 

3.5C++中WORD和BYTE定义

3.6JS中ASCII和字符转换


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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值