Article View: es.comp.lenguajes.java
Article #28251Q: Lectura de fiechero binario
From: Rafael Garcia Leiva
Date: Mon, 11 May 1998 00:00
Date: Mon, 11 May 1998 00:00
95 lines
2923 bytes
2923 bytes
Parece que el anterior llego mal. Asi que reenvio la pregunta :-)
Hola!
Tengo un fichero binario, que puedo leerlo perfectamente desde C,
pero con java tengo problemas (trabajo con Solaris)
El fuente en C es el siguiente:
main() {
FILE *fp;
int lsb, msb;
int agno;
fp = fopen( "97280a14.hrp", "rb" );
lsb = (int)getc(fp);
msb = (int)getc(fp);
agno = msb * 256 + lsb;
(void)printf( "lsb: %d\n", lsb );
(void)printf( "msb: %d\n", msb );
(void)printf( "A�o: %d\n", agno );
(void)fclose( fp );
}
que da el siguiente resultado:
lsb: 205
msb: 7
A�o: 1997
Utilizando el programa java:
int lsb, msb;
int a�o;
InputStream fich = new FileInputStream( "97280a14.hrp" );
DataInputStream in = new DataInputStream( fich );
lsb = (int)in.readByte();
msb = (int)in.readByte();
a�o = ( (msb * 256) + lsb );
System.out.println( "lsb: " + lsb );
System.out.println( "msb: " + msb );
System.out.println( "A�o: " + a�o );
obtengo como resultado:
lsb: -51
msb: 7
A�o: 1741
que no es lo que quiero. Supongo que el problema esta en que readByte supone
bytes con sigo, y yo los necesito unsigned. Tampoco funciona el siguiente
codigo
byte b1, b2;
int a�o;
b1 = in.readByte();
b2 = in.readByte();
a�o = ( ( b2 << 8 ) | b1 );
System.out.println( "lsb: " + b1 );
System.out.println( "msb: " + b2 );
System.out.println( "A�o: " + a�o );
que da como resultado:
lsb: -51
msb: 7
A�o: -51
se ve que antes de trabajar a nivel de bits convierte los bytes a enteros.
Utilizando el readShort() tampoco funciona (me da A�o: -13049),
y al final lo unico que he conseguido que funcione es:
b1 = in.readByte();
b2 = in.readByte();
a�o = (int)( ( (0x000000FF & b2) << 8) | ( 0x000000FF & b1 ) );
que me parece tremendamente engorroso. No hay una forma mas facil de
hacerlo.
Un saludo, y gracias por adelantado.
----------------------------------- ----------------------------------------
| Rafael Garcia Leiva | Servicio de Informacion de Territorio |
| cc1galer@uco.es | E.T.S de Agronomos y Montes |
| Tlf: 34 (9)57 218921 | Universidad de Cordoba (Spain) |
| Fax: 34 (9)57 218563 | http://www.uco.es/servicios/scit |
----------------------------------- ----------------------------------------
Technical Details
Message-ID:
<6j6l7k$qvb$2@erika.cica.es>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,755beee34340d88a X-Google-Attributes: gid1116f3,public From: cc1galer@uco.es (Rafael Garcia Leiva) Subject: Q: Lectura de fiechero binario Date: 1998/05/11 Message-ID: <6j6l7k$qvb$2@erika.cica.es> X-Deja-AN: 352205214 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=iso-8859-1 Organization: Centro Informatico Cientifico de Andalucia Mime-Version: 1.0 Newsgroups: es.comp.lenguajes.java