程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 詭異的字符處理,你知道原因嗎?

詭異的字符處理,你知道原因嗎?

編輯:C++入門知識

代碼如下:

 define MDPW_READY          "\010"  
int test(char *cmd) 
{ 
    int id = (int)*cmd; 
    return id; 
} 

#define MDPW_READY          "\010"
int test(char *cmd)
{
 int id = (int)*cmd;
 return id;
}

當調用test(MDPW_READY)返回結果是多少呢?大家看字符前有個\0,字符串結束的標識,那又該怎麼理解哦。。。

答案是8,知道這是為什麼嗎?下面我來為大家分析一下:

大家先來看C裡面對八進制和十六進制的處理。


C語言中8進制和16進制怎麼表示

C語言本身支持的三種輸入是:
1. 十進制。比如20,457;
2. 十六進制,以0x開頭。比如0x7a;
3. 八進制,以0開頭。比如05,0237

所以C語言沒有二進制輸入,最多可用函數去實現。

八進制數的表達方法

C/C++規定,一個數如果要指明它采用八進制,必須在它前面加上一個0(數字0),如:123是十進制,但0123則表示采用八進制。這就是八進制數在C、C++中的表達方法。

C和C++都沒有提供二進制數的表達方法

現在,對於同樣一個數,比如是100,我們在代碼中可以用平常的10進制表達,例如在變量初始化時:

int a = 100;

我們也可以這樣寫:

int a = 0144; //0144是八進制的100;

千萬記住,用八進制表達時,你不能少了最前的那個0。否則計算機會通通當成10進制。不過,有一個地方使用八進制數時,卻可以不使用加0,那就是用於表達字符的“轉義符”表達法。
八進制數在轉義符中的使用

我們學過用一個轉義符'/'加上一個特殊字母來表示某個字符的方法,如:'\n'表示換行(line),而'\t'表示Tab字符,'\''則表示單引號。今天我們又學習了另一種使用轉義符的方法:轉義符'\'後面接一個八進制數,用於表示ASCII碼等於該值的字符。

比如,查一下ASCII碼表,我們找到問號字符(?)的ASCII值是63,那麼我們可以把它轉換為八進值:77,然後用 '\77'來表示'?'。由於是八進制,所以本應寫成 '\077',但因為C/C++規定不允許使用斜槓加10進制數來表示字符,所以這裡的0可以不寫。

例如:

printf("\077\n\77\n")

則輸出結果為:

?

?

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved