sscanf处理字符串很是方便,但是特别要注意接收类型的长度,如果长度不统一可能会导致程序崩溃,内存泄漏。
两个char 转16进制
char testhere[6]={0x31,0x38,0x34,0x32,0x36,0x33};
unsigned int a[3];
sscanf((const char*)testhere,"%2x%2x%2x",&a[0],&a[1],&a[2]);
接收一个GPS的GPGGA的数据
特别注意的是浮点数的接收,double就用%lf,避免出错,否则可能会越界,内存溢出
char *phead = {$GPGGA,071432.00,3036.01954594,N,10405.71174136,E,4,21,0.6,493.68986996,M,-42.80,M,02,3077*4B}
sscanf((const char*)(p_head),\
",%f,%lf,%c,%lf,%c,%d,%d,%f,%lf,%c,%f,%c,%d,%d*%2X",\
&gps.gga.Utc,\
&gps.gga.Lat,\
&gps.gga.N_S,\
&gps.gga.Lon,\
&gps.gga.E_W,\
&gps.gga.Qual,\
&gps.gga.Sat,\
&gps.gga.Hdop,\
&gps.gga.ALT,\
&gps.gga.A_units,\
&gps.gga.Undulation,\
&gps.gga.U_units,\
&gps.gga.Age,\
&gps.gga.Stn_ID,\
&gps.gga.Check_Sum);
零散知识点记录
指针对数值的++操作
用指针对数值进行加一
*p++
此处禁忌,不可以用*p-- p--的优先级高于*p
应改为(*p)++
char和unsigned char的区别分析
取值范围:
char:-128--127
unsigned char 0--255
位分析:
char的最高位是符号位
当由char强转为int时,符号位仍在最前面
当char和unsigned char不用与比较转换,打印时,他们在内存中占的位是一样的,在内存中都是8字节。完全一样