시리얼 시리얼 문자 유형 CONST의 char * 및 서명 숯불에 * 문제

면책 조항 :이 문서에는 다시 인쇄 허용 블로거없이 기사의 링크를 설정하십시오 블로거 원본입니다! https://blog.csdn.net/qq_30460905/article/details/90720518

빚진 부채 C를 배울 때, 조만간이 상환해야합니다. . . 기본을 잊어 버려

문자 캐릭터 타입 (-128-127)은, 127 이상은 1 바이트이다 둘 부호 문자 부호 캐릭터 타입 (255)를 오버 플로우한다.

숯불 값이 양수이면, 원래 값의 환산 값.
숯 타입이 네거티브 인 경우, 부호 비트 값, 즉, 결과는 보체의 원래 값의 부호를 나타내는 코드이고, 원래의 데이터 비트들로 변환한다.

계산식은, 결과 값 256 = + 원래 값이다.

참고 링크 : https://zhidao.baidu.com/question/487910754.html

1 문제 설명

시리얼 읽기 데이터 사용 후에는 데이터 변환 읽을 필요하고, 데이터 유형이 관심을 지불하지 않습니다 시작, INT (문자), 다음 인쇄 진수가 음수 발견

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 바이트를 더한 팔 왼쪽 데이터 위치 데이터, 노트 괄호, 플러스 높은 우선 순위를 연결 :

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