2014-01-20 57 views
0

我目前正在使用SWFFiles。 在SWF標題IST RECT中,它由5個字段構建。第一個是5比特字段(N比特 - >用來指定其他領域的長度從ifstream讀取任意位數

Rectangle record

應該如何看起來像一個方法,它接受一個參數(多少位讀)和ifstream

讀它?

SWF File format specification

謝謝,S.

回答

0

C++文件流是面向字節的,你不能從中讀取比特的特定數目(除非數量是多個O當然是f 8)。

要獲得5位數據,您必須讀取整個字節,然後屏蔽掉8位感興趣的數據。如果該字節還包含另一個字段,則必須將其保留以備後用。如果你足夠通用,你可以編寫你自己的「比特流」類,在內部緩衝未使用的字節部分。

爲了獲得低位(最低顯著)字節的5位:

unsigned char bits = byte & 0x1F; // note 0x1F = binary 00011111 

要獲得高階(最顯著)5位:

unsigned char bits = byte >> 3; // shift off the unused 3 low bits 
+0

請你展示一些代碼如何提取比特值從說一個雙? –

+0

@Cool_Coder我不認爲你想對雙打做任何事情,但是請參閱上面的編輯以獲取來自低端或高端的比特(使用哪一端取決於文件格式)。 – TypeIA