2009-09-08 9 views
16

私はTIFF IFDを書こうとしていますが、私は以下のことを行う簡単な方法を探しています(このコードは明らかに間違っていますが、 :(java)ファイルリトルエンディアンで書く

0C00 0301 0300 0100 0000 0100 0000

は私がバイト(のwriteInt、のwriteChar、など)の正確な数を取るために書き込みメソッドを取得する方法を知っているが:

out.writeChar(12) (bytes 0-1) 
out.writeChar(259) (bytes 2-3) 
out.writeChar(3) (bytes 4-5) 
out.writeInt(1) (bytes 6-9) 
out.writeInt(1) (bytes 10-13) 

を書きますリトルエンディアンで書く方法を知らない。誰でも知っていますか?

答えて

31

たぶん、あなたはこのような何かを試してみてください:

ByteBuffer buffer = ByteBuffer.allocate(1000); 
buffer.order(ByteOrder.LITTLE_ENDIAN);   
buffer.putChar((char) 12);      
buffer.putChar((char) 259);      
buffer.putChar((char) 3);      
buffer.putInt(1);        
buffer.putInt(1);        
byte[] bytes = buffer.array();  
+0

+1 – dhable

6

ByteBuffer、特に 'order'の方法を確認してください。 ByteBufferは、Java以外のものとのインターフェースを必要とする私たちのための祝福です。

7

のByteBufferは明らかに良い選択です。このような便利な関数を書くこともできます。

public static void writeShortLE(DataOutputStream out, short value) { 
    out.writeByte(value & 0xFF); 
    out.writeByte((value >> 8) & 0xFF); 
} 

public static void writeIntLE(DataOutputStream out, int value) { 
    out.writeByte(value & 0xFF); 
    out.writeByte((value >> 8) & 0xFF); 
    out.writeByte((value >> 16) & 0xFF); 
    out.writeByte((value >> 24) & 0xFF); 
} 
関連する問題