Serial串口字符类型const char*和unsigned char*问题

版权声明:本文为博主原创文章,未经博主允许不得转载,转载请设置文章链接! https://blog.csdn.net/qq_30460905/article/details/90720518

学C时欠的债,迟早是要还的。。。基础知识都忘了

char为字符类型(-128-127),超过127就会溢出,unsigned char为无符号字符类型(0-255),二者均为一个字节。

当char类型的值为正时,转换后的值为原值。
当char类型为负时,原始值的符号位会转为数据位,即结果值为原始值补码代表的无符号值。

具体计算公式为,结果值=256+原始值。

参考链接:https://zhidao.baidu.com/question/487910754.html

1、问题介绍

在使用串口读取数据之后,需要读取转换的数据,开始没注意数据类型,发现int(char)后为负数,16进制打印出来如下

data[0]: 0x55
data[1]: 0xffffffaa
data[2]: 0x3
data[3]: 0xffffff84
data[4]: 0x1
data[5]: 0x2
data[6]: 0x1

部分程序如下

#include "serial/serial.h"
string rec_buffer;  //串口数据接收变量

string port("/dev/ttyUSB0");//串口号
unsigned long baud = 115200;//小车串口波特率
serial::Serial my_serial(port, baud, serial::Timeout::simpleTimeout(1000));//配置串口
rec_buffer =my_serial.read(my_serial.available());    //获取串口发送来的数据
const char *receive_data=rec_buffer.data(); //保存串口发送来的数据

加入强制类型转换,将receve_data,转化为无符号指针 b:

参考链接:https://blog.csdn.net/igaming/article/details/25978235

unsigned char *b;
b = (unsigned char *)receive_data;

连接两个字节的数据,高位数据左移八位加上地位数据,注意加上括号,加号优先级高于位移符号:

int distance;
cout<<"b4: "<<int(b[4])<<" b5: "<<int(b[5])<<endl;
distance= (b[4]<<8)+b[5];
cout<<"distance: "<<distance<<endl;

猜你喜欢

转载自blog.csdn.net/qq_30460905/article/details/90720518
今日推荐