現(xiàn)在工作用C,常常要玩硬體,然後眾所皆知,硬體常常會(huì)用C字串傳值或指令,然後對(duì)這些字串做處理,搞得我不得不回去複習(xí)char這東西
char這東西其實(shí)就是1個(gè)byte的值,然後電腦會(huì)依照編碼規(guī)範(fàn)來輸出字元
比如說在ASCII規(guī)範(fàn)裡,'0011 0000'會(huì)輸出0這個(gè)字元
因此當(dāng)你宣告字元變數(shù)時(shí):
char c = '0';
等價(jià)於:
char c = 0x30;
因?yàn)镃本身沒有二進(jìn)位輸入的規(guī)範(fàn),因此都是以16進(jìn)位來做輸入
既然現(xiàn)在知道char也是一個(gè)值,那麼代表他也能做運(yùn)算,不過畢竟只有一個(gè)Byte,除非你確定使用的規(guī)範(fàn)允許,不然我們能做的運(yùn)算只有邏輯運(yùn)算
比如要取某個(gè)bit的值
值: 0011 0000
取第5個(gè)bit:
int bit5 = 0;
bit5 = (c & 32) && 1;
另外有看到另一種取bit的寫法
bit5 = (c >> 4) && 1
原本都是用上面的,不過下面的比較直觀,以後我會(huì)都改用這種方式取
然後還有一點(diǎn)是最近碰到的問題
因?yàn)檎瘴耶?dāng)時(shí)硬體的文件來說,某個(gè)分位取出的值會(huì)是實(shí)際的值
也就是說0~100在該分位裡會(huì)以0x00~0x64顯示,這非常麻煩,因?yàn)槲也荒苤苯佑胊toi去轉(zhuǎn),這會(huì)造成取值的錯(cuò)誤
所以我必須把值直接做成字串
char ctoiBuffer[5];
int i;
char c = 0x64;
sprintf (ctoiBuffer, "%d", c);
i = atoi (ctoiBuffer);
如此一來,我們就做運(yùn)算了