轉義字元是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 和空格符等都是可顯示字元。另一類字元卻沒有這種特性。它們或者在鍵盤上找不到對應的乙個鍵 當然可以用特殊方式輸入 或者當按鍵以後不能顯示鍵面上的字元。...