问题描述
如图,经过函数把接收到的十六进制字符串转换为EEE754标准浮点数后速度角度无法正常解析显示,其中速度角度的解码过程如下:
(以速度为例)
yv_temp1= dec2hex(data_receive(2));
yv_temp2= dec2hex(data_receive(3));
yv_temp3= dec2hex(data_receive(4));
yv_temp4= dec2hex(data_receive(5));
hex_v_temp = [yv_temp1, yv_temp2, yv_temp3, yv_temp4];
hex_v = dec2bin(hex2dec(hex_v_temp),32);
M_v = bin2dec(hex_v(10:32));
E_v = bin2dec(hex_v(2:9));
yv = (-1)^(hex_v(1))*(1+M_v*(2^(-23)))*2^(E_v-127);
存在问题
- 其实就是十六进制字符串的拼接问题:当使用
dec2hex
函数时,默认情况下,它不会返回前导零。这可能导致拼接后的hex_v_temp
字符串长度不是8(因为每个字节应该是两个十六进制字符)。这会影响后续的hex2dec转换。
修正:确保每个十六进制字符串都有两个字符,不足时补零。
解决方法
yv_temp1 = dec2hex(data_receive(2), 2); % 确保有两个字符
yv_temp2 = dec2hex(data_receive(3), 2);
yv_temp3 = dec2hex(data_receive(4), 2);
yv_temp4 = dec2hex(data_receive(5), 2);
hex_v_temp = [yv_temp1, yv_temp2, yv_temp3, yv_temp4];
修改后yv,yr可正常显示