常用字串解析與處理方法

2021-06-25 23:03:24 字數 1331 閱讀 1067

常用字串解析與處理方法

daniellee   2014-9-25

工作一年多來,發現經常會用到字串的解析與處理,比如編寫路由器控制軟體時,要對路由器返回的命令進行解析;對gps註冊網路時要進行命令的組合與返回值的判斷;採集北斗資料時,要從標準gga、gsa、rmc等協議中分類引數等等,其實都是如何處理字串的問題,把字串處理好,可以很容易的處理命令的互動。

一、字串中變數提取

① scanf,可以通過特定的格式將乙個字串的變數直接分離出來,如下:

對「ipaddr=192.168.2.1:12345,id=25535,time=3,speed=10end」進行引數提取可以用

paracnt= sscanf(parastr,"%[^=]=%[^:]:%[^,],%[^,],%[^,],%[^e]",headertemp,ipaddrtemp,porttemp,idtemp,timetemp,aralmspeedtemp)來處理。這其中有4個變數,提取方法簡單。值得注意的是其中幾個數字的長度是會發生變化的,如果單純靠字元的位置進行解析有時是會出錯的,scanf利用特殊符號進行分隔可以有效解決這個問題。

再舉乙個例子,如果你需要處理gps或bd發來的定位資訊,例如「$gpgga,063952.000,4002.229934,n,11618.096855,e,1,4,2.788,37.254,m,0,m,,*71」

每條字串可能包含很多變數,有的甚至可達20-30個,再使用之前的方法顯然會很不方便。這時可以結合字串設定的規則與scanf,比如在gps或bd協議中每個變數之間都使用「,」隔開,這樣通過查詢是第幾個變數後再通過scanf就可以把變數提取出來了。

使用這個方法在字串提取浮點數時尤為有用。

②專用庫函式。我們很容易遇到去判斷與解析比如ip位址、mac位址、子網掩碼等字串的情況,如果自己去實現是需要花一點時間編寫和除錯,後來發現可以使用netascii_str_to_mac()、netascii_mac_to_str()、netascii_str_to_ip()、netascii_ip_to_str()等一系列的函式去處理,即簡單又可靠,豈不是比自己寫省時省事,高大上多了。

二、變數轉為字串

sprintf(),主要功能是把格式化的資料寫入某個字串中,是個變參

函式。例如通過以下方式就可以把儲存在陣列中的ip位址轉化為at指令中的字串命令了

strcat(tcpcmd,(char*)"at+cipstart=\"tcp\",\"");

for(i=0;i<3;i++)

三、其他

在處理浮點數時,也會遇到與陣列轉換的情況,通常是設定乙個結構體或共用體,來逐字節的讀出,把浮點數轉為陣列比較或儲存,反過來逐字節存入後,整體讀出就可以得到浮點數的值了。

Golang 常用字串處理方法

package main import fmt strings unicode utf8 func main return false fmt.println fmt.println hasprefix 函式的用法 fmt.println strings.hasprefix nlt abc nlt ...

常用字串方法

1 返回指定位置的字元 charat 方法可返回指定位置的字元。str.charat 指定位置 2 替換字串中的乙個或者幾個字元 replace 被替換的字元,新替換的字元 若第二個引數為空也可用於刪除特定字元,執行乙個全域性替換 var str mr blue has a blue house a...

mysql常用字串 MYSQL常用字串函式寶典

mysql常用字串函式 想更進一步加強自己在查詢語句方面的能力,需要掌握常用函式。字串函式 1 concat s1,s2,sn 將s1,s2,sn串聯成乙個字串。exp root test 14 43 desc t1 field type null key default extra id int ...