ETH官方钱包

切換
舊版
前往
大廳
主題

淺談char這東西

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

現(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)算了

創(chuàng)作回應(yīng)

更多創(chuàng)作