2013-03-07 124 views
0

以二進制模式將字符保存到文件需要多少空間[8位或12位]?將數據保存到二進制文件

fprintf(f,"%ld",ch); 

另外,如果我保存較長[說5] 然後多少空間它要花3比特[101]或8bits的[00000101]

回答

1

它複製在您的平臺上存儲long所需的字節數(sizeof (long))。如果它只複製了代表編號所需的位,那麼讀取數據時就無法解釋數據。

在你的代碼中,你正在複製到一個字符串。所以字符(可能是ASCII)表示將被存儲,而不是二進制數字。

1

有一個很好的幫助工具,你需要爲這個:sizeof Wiki article

引用:

在編程語言C和C++,一元運算符的sizeof用於計算任何數據類型的大小,在BYT的數量來衡量es需要表示類型。此上下文中的字節與無符號字符相同,並且可能大於8位,但這並不常見。 sizeof的結果是前面的表達式或帶括號的類型說明符的類型的大小,並且具有無符號整數類型,通常用size_t表示。 sizeof可以應用於任何數據類型,包括基本類型,如整型和浮點類型,指針類型或複合數據類型(聯合,結構或C++類)。

所以基本上:如果你想知道有多少字節的東西將如何使用,只要使用的sizeof

注意但是:指針,這其實都是三分球,但使用不同(如數組)等元素只顯示指針的字節大小...不是結構的指針指向!並且存儲指針的用途非常有限 - 下次您要使用的對象可能位於內存中的其他位置。

+0

多其實我正在執行LZ壓縮方法和我是在迷茫點,我需要用它的索引號替換字符串[length> = 2]。 所以如果我用257 [它的索引]代替「ls」[16位],那麼在替換「ls」之後這個256將佔用多少空間[或多或少?以及如何?] – adil 2013-03-07 13:31:46

4
fprintf(f,"%ld",...) 

會將您的號碼轉換爲十進制數字,並將需要log_10(ch)字節來存儲。 當您使用fwrite存儲它時,它將佔用您指定的字節數。

fwrite (buffer , 1 , sizeof(buffer) , f) 

也關注,因爲你永遠不會單一比特存儲爲文件的讀寫接取是按字節,因此總是8.

+0

示例輸入文件包含45個字節,ASCII文本字符串:/ rain/in /西班牙/落在/主要/在/ the/plain上。當我們說LZW算法從輸入文件讀取字符「a」時,我們的意思是讀取值:01100001(97表示爲8位),其中97是ASCII中的「a」。當我們說它將字符「a」寫入編碼文件時,我們的意思是它寫道:000001100001(97表示爲12位)。 我在[link](http://www.dspguide.com/ch27/5。HTM),所以數據總是以8的倍數存儲? 這對我來說有點困惑? – adil 2013-03-07 14:23:48