2010-12-11 53 views
1

因此,對於一個項目,空間真正重要的真的很簡單的問題,我希望能夠寫入文件的數量,其佔用3個字節。所以基本上,這是一個無符號類型,其中16,777,215是可能的最高數字。有關創建非標準尺寸的字節組

數給出一個unsigned int,和我已經檢查,以確保它是0和16,777,215之間。我如何超越?在Java中

代碼是首選,但ANSI C也可以。謝謝!

+0

您可以使用C. _Without代碼工會,所以這不是一個anwser._ – khachik 2010-12-11 20:47:21

+1

哇,你可以寫一個三個字節值使用工會沒有任何C代碼的文件?我很佩服。 – 2010-12-11 20:49:27

+0

@Peter也許我沒有得到你的玩笑,但OP詢問了代碼,而我現在很懶惰寫下它:) – khachik 2010-12-11 20:52:19

回答

2

您可以嘗試

int number = 
OutputStream os = 
os.write(number >> 16); 
os.write(number >> 8); 
os.write(number); 

要閱讀

InputStream is = 
int number = ((is.read() & 0xFF) << 16) | ((is.read() & 0xFF) << 8) | (is.read() & 0xFF) 

然而,由於一個字節的成本是如此的微不足道,你必須拯救一個可怕的很多人,使增加的複雜性價值它。我只將它列入這裏供您參考。

2 TB of disk space is worth about $100 
1 GB is worth about 5 cents 
1 MB is worth about 0.005 cents 
1 KB is worth about 0.000005 cents. 
1 B is worth about 0.000000005 cents. 

爲了比較,在最低工資標準,(你會珍視自己的時間更高度)

1 minute of your time, 12 cents. ~2 GB. 
1 second, 0.2 cents. ~40 MB. 
1 key, 0.2 seconds, 0.04 cents ~8 MB. 
1 blink. 0.05 seconds, 0.01 cents ~2 MB. 

這使得相當令人不安的建議,即其不值得按下一個鍵保存小於8 MB。你甚至可以得出結論,除非它節省了2 GB的磁盤空間,否則它不值一個簡單的代碼更改。 :P

+0

好吧,也許他正在編程電熨斗或洗碗機,或者只需要在手機中存儲大量的數字:)總是有時候保存1個字節是有用的。 – 2010-12-11 21:11:08

+0

誰會說他將它們存儲在磁盤上?也許他將數據存儲在嵌入式閃存中。或者他也許關心I/O帶寬。爲什麼放棄使用25%的I/O帶寬的機會? – Gabe 2010-12-11 21:26:18

+0

如果他想讓數字更小,他可以使用停止位編碼。 (簡單的壓縮方法)這樣數字可以只是一個字節。 – 2010-12-11 22:08:39

0

在C你總是可以投的* INT成*字符,然後寫了至少3個字節顯著。對於Big Endian,您可以跳過第一個字符並將其他三個字符寫入小端,只寫前三個字節。