Binary Processing Tips(二進位處理技巧)

來源:互聯網
上載者:User
文章目錄
  • 2.1 取特定的位(Mask + & + >>)
  • 2.2 產生特定的位(Mask + | + >>)
  • 2.4 二進位解碼

最近在做協議分析(RTMP),程式裡時常要處理二進位。我網上搜尋了一下,沒有發現對二進位處理技巧的總結或者說明,自己嘗試著總結一下。

1,基礎

電腦在底層基本上都是以二進位來傳遞和儲存的。類似於這樣的序列:

0010 1100, 0001 1101

在使用的時候在把這些二進位翻譯成“有意義”的格式,比如翻譯成英語字母。在表示二進位的時候如果直接用0和1來顯示,那樣會太長,不太好表示。程式中我們一般會將二進位表示成十進位或十六進位。比如上面的二進位就可以表示成:

44, 29        =>十進位

0x2c, 0x1d =>十六進位

因為我們通常將每8位(bits)視為為1個位元組(byte),也就是1byte = 8bits。位元組是電腦傳輸的儲存的大小和邊界,也就是我們通常說的最小單位。為此我們在程式中通常是以8bits來處理,儲存,傳輸二進位的。

在電腦中十六進位和二進位是天然適配的,也就是說每4個二進位(4bits)正好對應一個十六進位的數(從0~F)。所以程式語言中大多數直接支援十六進位字面量的,比如在很多語言中我們可以這樣定義byte(也就是2個4bits):

buf[0] = 0x2c

我們說過每個byte是8bits,這用十進位來表示的話就是0~255,程式設計語言中沒有直接對於的類型來表示這個範圍的數字,所以在C語言中我們用了大小一致的char類型,因為char類型也是8bits來表示的。但我們通常都是處理一串二進位,所以我們還可以用int(4bytes)作為單位大小來表示二進位,這樣一個int值就可以表示4bytes。

2,二進位演算法

我們處理二進位的需求通常有:

1,取特定的一位或幾位(這在協議分析中時常使用)

2,產生特定一位或幾位

2,二進位編碼格式用於傳輸和儲存

3,二進位解碼成特定格式

2.1 取特定的位(Mask + & + >>)

在程式裡使用掩碼(Mask)來取得特定的位,比如對於下面的二進位:

0010 1100

我們如果從左開始的第三位,那麼首先建立這樣的掩碼:0010 0000,也是除了第三位以外都置0。這時我們就可以“按位與”得到具體的一位,再結合移位元運算就可以得到結果:

0010 11000010 0000 &--------------------0010 0000 >> 5  = 0000 0001

如果我們取中間的4位也一樣,先產生掩碼:0011 1100,然後:

0010 11000011 1100 &-------------0010 1100 >> 2  = 0000 1011
2.2 產生特定的位(Mask + | + >>)

產生特定的位也類似,只不過將&換成|。因為0和0或1的“或操作”不影響原來的值。比如,我們想把下面這個二進位從左邊開始的3~5變成010:

0010 1100

我們的演算法分為兩步,第一步先將3~5位置0,為此我們產生掩碼11(00 0)111,然後使用&將中間3~5位置0。置0後我們用掩碼00(01 0)000和

0010 11001100 0111 &    => 中間位置0掩碼-------------------0000 0100       => 3~5位已置00001 0000 |     => 中間位操作掩碼-------------------0001 0100  =>00(01 0)100 中間已置位的結果
2.3 二進位編碼

既然談到編碼和解碼,那麼在編碼和解碼之間必須達成協議,這個協議我們通常稱為碼錶。在編碼和解碼過程中我們需要查碼錶來編解碼。其實編碼就是中映射,常用的映射有:

8bits => char(ASCII)

32bits, 4bytes => unsigned integer(uint)

比如我們對以下二進位編碼:

0010 1100, 0101 1101, 0011 0001, 0110 1110

結果:

ASCII  => ,]1nuint   => 744305006
2.4 二進位解碼

解碼和編碼的方式類似,是編碼的逆向操作。

3,程式操作執行個體

待添加…

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.