シリアルシリアル文字型のconstのchar *、およびunsigned char型の*問題

免責事項:この記事はブロガーオリジナル記事です、転載することができブロガーずに、記事へのリンクを設定してください!https://blog.csdn.net/qq_30460905/article/details/90720518

Cを学ぶために借金は、遅かれ早かれ、返済する必要がある場合。基本を忘れて

チャー文字種(-128-127)は、127の上には、1バイトであり、どちらもunsigned charの符号なし文字型(0〜255)、オーバーフローします。

char値が正である場合、元の値の変換値。
char型が負の場合、符号ビットの値、すなわち、結果は、補体の元の値の符号なしコード代表であり、元のデータビットに変換されます。

計算式は、結果値256 = +元の値です。

参考リンク:https://zhidao.baidu.com/question/487910754.html

1、問題の説明

シリアル読み出したデータを使用した後、データ変換が読み込まれる必要がある、とデータ型は注意を払っていない開始し、int型(CHAR)、次の印刷進が負のを見つけました

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(); //保存串口发送来的数据

符号なしポインタbに変換し、receve_dataなり、キャストを追加します。

参考リンク:https://blog.csdn.net/igaming/article/details/25978235

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

データの2バイト、プラス8つの左上のデータ位置データ、ノート括弧、プラス変位の記号よりも高い優先度を接続します。

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