現在工作用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);
如此一來,我們就做運算了