切換
舊版
前往
大廳
主題

淺談char這東西

出人意表的基德 | 2018-08-01 16:25:16 | 巴幣 1000 | 人氣 134

現在工作用C,常常要玩硬體,然後眾所皆知,硬體常常會用C字串傳值或指令,然後對這些字串做處理,搞得我不得不回去複習char這東西

char這東西其實就是1個byte的值,然後電腦會依照編碼規範來輸出字元

比如說在ASCII規範裡,'0011 0000'會輸出0這個字元

因此當你宣告字元變數時:

char c = '0';

等價於:

char c = 0x30;

因為C本身沒有二進位輸入的規範,因此都是以16進位來做輸入


既然現在知道char也是一個值,那麼代表他也能做運算,不過畢竟只有一個Byte,除非你確定使用的規範允許,不然我們能做的運算只有邏輯運算

比如要取某個bit的值

值: 0011 0000

取第5個bit:
int bit5 = 0;
bit5 = (c & 32) && 1;

另外有看到另一種取bit的寫法

bit5 = (c >> 4) && 1

原本都是用上面的,不過下面的比較直觀,以後我會都改用這種方式取


然後還有一點是最近碰到的問題

因為照我當時硬體的文件來說,某個分位取出的值會是實際的值

也就是說0~100在該分位裡會以0x00~0x64顯示,這非常麻煩,因為我不能直接用atoi去轉,這會造成取值的錯誤

所以我必須把值直接做成字串

char ctoiBuffer[5];
int i;

char c = 0x64;

sprintf (ctoiBuffer, "%d", c);
i = atoi (ctoiBuffer);

如此一來,我們就做運算了

創作回應

更多創作