C 轉義字元 解決惱人的協議頭尾16進製制問題

2021-08-30 17:48:43 字數 1476 閱讀 9811

轉義字元是c語言中表示字元的一種特殊形式。通常使用轉義字元表示ascii碼字符集中不可列印的控制字元和特定功能的字元。

常見轉義字元及對應ascii碼\a

響鈴(bel)

\b退格(bs)

\f換頁(ff)

\n換行(lf)

\r回車(cr)

\t水平製表符(ht)

\v垂直製表符(vt)

\\反斜槓 \

\0空字元(null),常用作字串結尾

\ddd

任意字元,最多寫三位8進製數字

\xhh

任意字元,最多寫兩位16進製制數字

在網路協議中,都會存在幀頭、幀尾,用來界定乙個完整的幀,以解決粘包現象。

例如下面的簡單協議格式:

起始碼資料長度

資料內容

校驗碼結束碼

0xcd 0xcd

0x00 0x3d

(字串)

0xed 0x70

0x3a 0x4d

我們要向網路傳送乙個完整的資料幀,首先需要恰當的資料內容,再對資料內容進行封裝——新增起始碼、結束碼,計算資料長度、校驗碼,只有幀格式符合協議規定格式,才允許其傳送。

然而很多時候,我們會發現將起始碼、結束碼新增到幀(以字串形式儲存全部資料)並不容易。如何將16進製制的數簡易地轉換為字串呢?方法有如下幾種:

將每一位元組的16進製制數字依次轉換為字元型別,再逐個賦值到幀字串對應索引位置。

直接將整個16進製制數轉換為字串形式,然後追加到幀字串中。

對於方法1,可這樣實現:

//儲存完整一幀資料

char data[256];

//定義char變數,並以16進製制數為其賦值

//新增起始碼

char c = 0xcd;

data[0] = c;

data[1] = c;

//新增結束碼

c = 0x3a;

data[254] = c;

c = 0x4d;

data[255] = c;

可以看到,每一位數字的賦值,都需要2行**,相當麻煩,尤其是這樣的數非常多的時候。

下面我們看看方法2的實現:

//儲存完整一幀資料

char data[256];

//定義char *變數,並以字串為其賦值

//新增起始碼

char *str = "\xcd\xcd"; //注意轉義字元的使用,\xhh表示十六進製制數字

strcpy(data, str);

//新增結束碼

str = "\x3a\x4d";

strcpy(data+254, str);

可以對比一下,發現方法2比方法1簡潔、可讀性好,同時易於理解。

當要轉換的數非常多的時候,使用方法2將明顯提高轉換效率!

C 的轉義字元

0x1a,0x0a都是轉義為十六進製制數的,然後通過十六進製制數和十進位制數的轉換得到十進位制數值 給你乙個詳細的轉義字元說明吧 所有的ascii碼都可以用 加數字 一般是8進製數字 來表示。而c中定義了一些字母前加 來表示常見的那些不能顯示的ascii字元,如 0,t,n等,就稱為轉義字元,因為後...

解決WordPress中字元轉義的問題

wordpress中輸入兩個 的時候會識別成乙個橫槓,如果此時的文章中有 在,那麼其他人在複製貼上的時候就沒法使用,於是乎我尋找了三種有效的方法解決此問題!wordpress中會缺省會自動轉義一些字元,網路上也稱 轉換全半形標點符號 或者 轉義 wordpress使用了wptexturize函式將純...

C語言中的轉義字元

在字符集中,有一類字元具有這樣的特性 當從鍵盤上輸入這個字元時,顯示器上就可以顯示這個字元,即輸入什麼就顯示什麼。這類字元稱為可顯示字元,如a b c 和空格符等都是可顯示字元。另一類字元卻沒有這種特性。它們或者在鍵盤上找不到對應的乙個鍵 當然可以用特殊方式輸入 或者當按鍵以後不能顯示鍵面上的字元。...