2010-12-11 5 views
1

そのスペースが本当に問題になるプロジェクトでは、3バイトを要する数字をファイルに書きたいと思っています。したがって、本質的に、16,777,215が可能な限り高い数である符号なしタイプです。標準以外のサイズのバイトグループを作成することについて本当に簡単な質問

数字は符号なし整数で与えられています。私はすでに0から16,777,215の間であることを確認しました。私はそれをどのように超えていますか?

Javaのコードが推奨されますが、ANSI Cも動作します。ありがとう!

+0

ユニオンはC._Withoutコードで使うことができるので、これはanwserではありません._ – khachik

+1

うわー、Cでコードなしでユニオンを使ってファイルに3バイトの値を書くことはできますか?私は感銘を受けて。 –

+0

@Peter多分私はあなたの冗談を手に入れませんでしたが、OPはコードについて尋ねました、そして今私はそれを書くために怠惰です:) – khachik

答えて

2

あなたはしかし、バイトのコストは非常に簡単です与え、あなたは追加の複雑さの価値を作るためにそれらの非常に多くを保存する必要が

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

を読むには

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

を試すことができますそれ。私はあなたの情報のためだけにここに含めました。

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メガバイトを保存することはなく、不穏な提案を作る(あなたはより高度にあなたの時間を大切場合があります)。 2 GBのディスク容量を節約しない限り、単純なコードを変更する価値はないという結論に至るかもしれません。 :P

+0

多分、彼は電気アイロンや食器洗い機をプログラミングしているのでしょうか、携帯電話にたくさんの数字を格納する必要があります。 –

+0

誰がディスクに保存していると言いますか?たぶん彼は埋め込まれたフラッシュのデータを格納しています。あるいは、彼はI/O帯域幅について心配しているかもしれません。 25%少ないI/O帯域幅を使用する機会を逃すのはなぜですか? – Gabe

+0

数字を小さくしたい場合は、ストップビットエンコーディングを使用できます。 (単純な圧縮方法)そのようにすれば、数字はちょうど1バイトになります。 –

0

Cでは、* intを* charにキャストして、最下位3バイトを書くことができます。ビッグエンディアンの場合は、最初の文字をスキップして残りの3つを書き出します。リトルエンディアンの場合は、最初の3バイトを書きます。

関連する問題