Pregunta

Estoy intentando escribir TIFF IFD, y estoy buscando una manera simple de hacer lo siguiente (este código es incorrecto, obviamente, pero se pone la idea a través de lo que quiero):

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)

escribiría:

0C00 0301 0300 0100 0000 0100 0000

Me sabe cómo conseguir el método de escritura para tomar el número correcto de bytes (writeInt, writeChar, etc) pero no sé cómo llegar a escribir en Little Endian. Alguien sabe?

¿Fue útil?

Solución

Tal vez debería intentar algo como esto:

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();     

Otros consejos

ByteBuffer es al parecer la mejor opción. También puede escribir algunas funciones de confort como este,

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);
}

ByteBuffer , específicamente la ' método de orden '. ByteBuffer es una bendición para aquellos de nosotros que necesitan para interactuar con cualquier cosa que no Java.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top