日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 工業(yè)控制 > 電子設(shè)計(jì)自動(dòng)化
[導(dǎo)讀]作者:楊碩,華清遠(yuǎn)見(jiàn)嵌入式學(xué)院講師。 考察C程序員是否合格的一個(gè)重要標(biāo)準(zhǔn)就是看他操作字符串的能力,一個(gè)合格的C程序員應(yīng)該可以熟練的對(duì)字符串進(jìn)行拆分、組合、格式轉(zhuǎn)換以及搜索定位,從一堆數(shù)據(jù)中提取出有效信息。

作者:楊碩,華清遠(yuǎn)見(jiàn)嵌入式學(xué)院講師。

考察C程序員是否合格的一個(gè)重要標(biāo)準(zhǔn)就是看他操作字符串的能力,一個(gè)合格的C程序員應(yīng)該可以熟練的對(duì)字符串進(jìn)行拆分、組合、格式轉(zhuǎn)換以及搜索定位,從一堆數(shù)據(jù)中提取出有效信息。

比如說(shuō)我們要做一個(gè)GPS導(dǎo)航的項(xiàng)目,需要讀取GPS模塊以ASCII碼的形式發(fā)送過(guò)來(lái)的數(shù)據(jù),然后對(duì)這些數(shù)據(jù)進(jìn)行處理,提取我們需要的信息。這就涉及到很多操作字符串的問(wèn)題。下面就以此為例,利用strstr函數(shù)和sscanf函數(shù)解析GPS數(shù)據(jù)。

GPS輸出的數(shù)據(jù)格式如下:

$GPGGA,121252.000,3937.3032,N,11611.*6,E,1,05,2.0,45.9,M,-5.7,M,,0000*77

$GPRMC,121252.000,A,3958.3032,N,11629.*6,E,15.15,359.95,070306,,,A*54

$GPVTG,359.95,T,,M,15.15,N,28.0,K,A*04

$GPGGA,121253.000,3937.3090,N,11611.6057,E,1,06,1.2,44.6,M,-5.7,M,,0000*72

$GPGSA,A,3,14,15,05,22,18,26,,,,,,,2.1,1.2,1.7*3D

$GPGSV,3,1,10,18,84,067,23,09,67,067,27,22,49,312,28,15,47,231,30*70

$GPGSV,3,2,10,21,32,199,23,14,25,272,24,05,21,140,32,26,14,070,20*7E

$GPGSV,3,3,10,29,07,074,,30,07,163,28*7D

可以看到,GPS模塊發(fā)送過(guò)來(lái)的原始數(shù)據(jù)有很多,但是通常我們只需要其中的一部分信息就夠用了,比如對(duì)于導(dǎo)航的功能,我們只需要以$GPRMC開(kāi)頭,以換行符結(jié)束的一行信息就夠了。即:

$GPRMC,121252.000,A,3958.3032,N,11629.*6,E,15.15,359.95,070306,,,A*54

因此我們需要做的就是從讀取的數(shù)據(jù)中截取以$GPRMC開(kāi)頭的一行信息,然后從中解析出經(jīng)緯度、日期時(shí)間等有效信息即可。

假設(shè)從串口讀取的數(shù)據(jù)存放在一個(gè)字符串指針char *raw_buf指向的內(nèi)存單元里,首先我們通過(guò)ANSI C提供的strstr()函數(shù)找到以$GPRMC開(kāi)頭以換行符’n’結(jié)束的字符串:

/* find "$GPRMC" from raw_buf */

if ((wellhandled_string = strstr(raw_buf, “$GPRMC”)) != NULL)

{

for (i=0; i<strlen(wellhandled_string); i++)

{

if (wellhandled_string[i] == 'n')

{

wellhandled_string[i] = '