Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x scommette tutto, forse troppo, sulla batteria da 7500 mAh e sulla certificazione ArmorShell per farsi notare nella fascia più economica del mercato: lo abbiamo messo alla prova per capire a chi è rivolto questo smartphone che sacrifica un po' prestazioni, display e fotocamera per offrire l'autonomia migliore possibile a un prezzo decisamente contenuto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-03-2011, 18:38   #1
DeltaDirac
Senior Member
 
L'Avatar di DeltaDirac
 
Iscritto dal: Jan 2007
Città: Firenze
Messaggi: 2906
[JAVA] Lettura dati binari interi a 32-bit

Ciao,

vorrei un consiglio per leggere in JAVA dei dati binari in uscita da un AD converter di uno strumento di misura. Non conosco molto bene il linguaggio e la difficoltà principale che incontro è nella corretta lettura del formato binario.

Lo strumento è basato su piattaforma Intel x86, quindi i dati sono salvati in memoria in formato little-endian come signed int a 32 bit.

Ho tentato vari approcci con DataInputStream, BufferedReader, metodo read() diretto... ma non riesco ad ottenere una lettura corretta: ottengo valori pazzi, molto alti o zero, quando il contenuto del file binario è di altro tipo.

Esiste una macro interna allo strumento che esporta i dati in formato ASCII e dal confronto mi rendo conto dell'errore.

Questa è la classe ReadBin che ho tentato di utilizzare:

Codice:
// ReadBin.java
import java.io.DataInputStream;
import java.io.FileInputStream;

public class ReadBin {

  public static void main(String args[]) {
    try {

// Crea un data input stream
      FileInputStream fis = new FileInputStream("fileName.dat");
      DataInputStream dis = new DataInputStream(fis);

// Legge i primi venti dati dallo stream
	for (int t=0; t<20; t++)
      		System.out.println(dis.readByte());

// Chiude il file input stream
      fis.close();
    } catch (Exception e) 
	{
      	System.out.println("Exception: " + e);
    	}
    }
}

Il file binario è fileName.dat, che consta di 65536 dati di 4 bytes l'uno.

Al seguente LINK è reperibile il file fileName.zip che contiene il file binario (fileName.dat) e il file in formato ascii (fileName.txt).


http://dl.dropbox.com/u/21541796/fileName.zip


Grazie per ogni buon lume
DD
__________________

Alla povertà mancano molte cose, all'avarizia tutte.

Ultima modifica di DeltaDirac : 27-03-2011 alle 08:12.
DeltaDirac è offline   Rispondi citando il messaggio o parte di esso
Old 27-03-2011, 09:27   #2
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
In ObjectInputStream c'è una funzione che permette di leggere gli int. Non ricordo però se li legge big-endian o little-endian. Prova e vedi se i valori sono corretti.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 27-03-2011, 11:42   #3
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
L'ordine dei byte in datainputstream è quello di java (big endian).

Strano a dirsi ma una valida alternativa è FileImageInputStream.

Codice:
FileImageInputStream fin = new FileImageInputStream(new File("filename.dat"));
fin.setByteOrder(ByteOrder.LITTLE_ENDIAN);
for(int i = 0; i < 20; i++) {
    int numero = fin.readInt();
}
PS: Al file in formato ascii mancano un tot di righe (le prime 1722 ad essere precisi).
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 27-03-2011, 18:38   #4
DeltaDirac
Senior Member
 
L'Avatar di DeltaDirac
 
Iscritto dal: Jan 2007
Città: Firenze
Messaggi: 2906
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
L'ordine dei byte in datainputstream è quello di java (big endian).

Strano a dirsi ma una valida alternativa è FileImageInputStream.

Codice:
FileImageInputStream fin = new FileImageInputStream(new File("filename.dat"));
fin.setByteOrder(ByteOrder.LITTLE_ENDIAN);
for(int i = 0; i < 20; i++) {
    int numero = fin.readInt();
}
PS: Al file in formato ascii mancano un tot di righe (le prime 1722 ad essere precisi).
Si, grazie per la precisazione: non so spiegarmene il motivo ma l'upload del file *txt è andato male.

Questo è il nuovo link in cui compaiono entrambi i file (binario e formato testo) con le dimensioni corrette.


Venendo al nocciolo della questione: tu dici che l'ordine dei byte in JAVA è big-endian. E' un'asserzione notevole, e l'unica spiegazione che vedo e nella gestione del formato dei dati operato dalla JVM che per qualche ragione è diversa da quella nativa della CPU Intel (little endian). Ma nella documentazione non sono riuscito a scovare questa informazione; mi puoi indicare dove trovarla?

Comunque confermo: usando la classe FileImageInputStream tutto funziona a dovere. Grazie

Ovviamente occorre importare correttamente i pack e le classi relative.

Ho modificato il sorgente così:

Codice:
// ReadBin.java
import java.io.File;
import javax.imageio.stream.FileImageInputStream;
import java.nio.ByteOrder;

public class ReadBin {

  public static void main(String args[]) {
    try {

// Crea un FileImage input stream
      FileImageInputStream fis = new FileImageInputStream(new File("fileName.dat"));

// Converte in LITTLE_ENDIAN
	fis.setByteOrder(ByteOrder.LITTLE_ENDIAN);

// Legge i primi venti dati dallo stream
	for (int t=0; t<20; t++)
      		System.out.println(fis.readInt());

// Chiude il file input stream
      fis.close();
    } catch (Exception e) 
	{
      	System.out.println("Exception: " + e);
    	}
    }
}
Non ci sarei mai arrivato da solo.
Grazie ancora.
__________________

Alla povertà mancano molte cose, all'avarizia tutte.
DeltaDirac è offline   Rispondi citando il messaggio o parte di esso
Old 27-03-2011, 20:34   #5
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
La jvm è big-endian per via del capitolo 3.11 delle sue specifiche (operandi multibyte).

Per quanto riguarda il linguaggio, sebbene sia comunemente considerato big-endian solo per convenzione, l'ordine è - a mio sommessissimo parere - chiaramente espresso nelle specifiche del linguaggio (3.10.1) relativamente alle corrispondenze esadecimale-decimale - i corrispondenti esadecimali degli interi multibyte sono tutti big-endian.

Presumo che la ragione dipenda dal fatto che java è nato come strumento per il web e che quindi si sia scelto di adottare il formato "network byte order", cioè il big endian.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 28-03-2011, 09:03   #6
DeltaDirac
Senior Member
 
L'Avatar di DeltaDirac
 
Iscritto dal: Jan 2007
Città: Firenze
Messaggi: 2906
Prefetto, grazie!
__________________

Alla povertà mancano molte cose, all'avarizia tutte.
DeltaDirac è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Nothing e CMF in offerta Prime: Ear (3) ...
Football Manager 27 sta arrivando: ecco ...
NASA verso l'addio a Dragon dopo il 2030...
Theras porta in Italia Maestro, il robot...
Un iPhone bloccato si riavvia dopo 72 or...
Radeon RX 7000, Sapphire rilascia un nuo...
Dell presenta Pro Rugged 13 Extreme e Pr...
La Luna di Raccolto sull'Etna diventa fo...
Sondaggio Steam: NVIDIA GeForce RTX 5070...
Nuance Audio Plus, EssilorLuxottica pres...
Cloudflare rilascerà certificati ...
Offerte Prime anticipate: portatile con ...
Da 110 anni a 19 secondi: IBM Nighthawk ...
Europol accusa un sedicenne di essere il...
Meno frammentazione, più controll...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:06.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v