对于串口发送数据的一些理解
串口发送可以包含ascii发送和hex十六进制发送,不管采用哪种方式发送,计算机内部都是以二进制发送的,ascii发送会将你发送的ascii字符转换为对应的ascii码,0-127之间,然后将对应的ascii码以二进制方式在底层发送出去出;十六进制发送是直接将十六进制转换为二进制数据在底层发送出去。而对于接收端来说,如果发送方以十六进制发送,接收方需要以十六进制接收,发送方以ascii发送接收方则以ascii方式接收。
对于发送unsigned char buffer ={0xff,0x01};需要将数据准换为char*类型,而类型转换并不会对底层的二进制数据产生影响,例如0xff是一个int类型255 在底层是11111111,而转为char 类型后在底层依然是11111111,只是在数据类型表示层有了区别,unsigned char的255 表示255 ,而char的255表示-1。 数据类型的大小超出后会循环表示,而不是截断了。
所以对于发送{0xff,0x01}这种数据就是发送的二进制数据,底层是一样的,所以发送方和接收方的底层都是11111111 00000001。
io的输入输出函数 write和read 参数都是char或Qbytearray类型,发送的时候需要将unsigend char[] 类型转换为char,接收需要定义一个char*或Qbytearray数组,例如qt接收下位机发过来的{0xff,0x01}这样的二进制数组 接收后用.toHex()函数将其显示为十六进制, 如果接收的是文本字符串(ascii或utf8),接收的时候需要用QString::fromutf8()或者QString::fromloacal8bit()函数将Qbytearray进行转换,这个取决于发送方对于文本的编码方式不同而定。