17

私はTIFFIFDを書き込もうとしており、次のことを行う簡単な方法を探しています(このコードは明らかに間違っていますが、私が望むもの全体のアイデアを得ることができます):

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)

書くだろう:

0c00 0301 0300 0100 0000 0100 0000

書き込みメソッドが正しいバイト数(writeInt、writeCharなど)を使用するようにする方法は知っていますが、リトルエンディアンで書き込む方法がわかりません。誰か知ってる?

4

3 に答える 3

32

たぶんあなたはこのようなことを試してみるべきです:

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();     
于 2009-09-08T16:01:59.300 に答える
9

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);
}
于 2009-09-08T16:05:33.677 に答える
7

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

于 2009-09-08T15:53:39.643 に答える