簡體   English   中英

按位-並在C中使用HEX和CHAR

[英]bitwise-and with HEX and CHAR in C

我真的很沮喪。 嘗試實現CRC-CCITT算法時,我在一個Internet站點上找到了一個很好的示例。

有一行我完全不了解其輸出:

unsigned short update_crc_ccitt( unsigned short crc, char c){
[...]
short_c  = 0x00ff & (unsigned short) c;
[...]
}

我想計算"test"字符串"123456789"的CRC。 因此,在第一次運行中, short_c '為1。根據我的理解,從第一次運行起, short_c也應等於1 ,但是當我將其打印到控制台時,對於c = 1 ,我得到short_c = 49 怎么樣?

0x00ff in binary is: 1 1 1 1 1 1 1 1 
char 1 in binary is: 0 0 0 0 0 0 0 1
bitand should be   : 0 0 0 0 0 0 0 1 

我的錯誤在哪里?

字符1 ASCII代碼為0x31 =49。這與ASCII代碼為1的字符(即^A )不同。

基本上,您會混淆字符和數字。 字符串"123456789"的第一個字母是字符'1' ,在大多數典型計算機上,其十進制值為49。

該值由字符編碼決定, 字符編碼描述了如何為每個字符分配一個數字值,該數字值是計算機存儲的值。

C保證10位十進制數字的編碼將以緊湊的順序且沒有間隔,從'0' 因此,您始終可以通過執行以下操作將字符轉換為相應的數字:

const int digitValue = digit - '0';

這會將數字'0'轉換為整數0 ,以此類推,直到(包括) '9'所有數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM