Newsgroup: it.comp.java
Titolo: Trasformazione unsigned char C in char Java

Buongiorno a tutti. Volevo porre a tutti questo quesito:
mi arriva uno stream di dati da un apparato con questa struttura: ora
se vado a leggere i dati
con un programma in C il risultato del campo MAC è 00 D8 1B AB CD A6,
se invece faccio
tale lettura con un programma scritto in JAVA (riportato sotto) non
riesco a riportare gli stessi valori: qualcuno ha qualche idea????
ringrazio anticipatamente
struttura in C
typedef struct {
	unsigned char  A0;
	unsigned char  A1
   	unsigned char  A2;
	unsigned char  A3;
	unsigned char  MAC [6];
} CHSTRU;
JAVA
               byte A0   = data_in.readByte ();
               byte A1   = data_in.readByte ();
               byte A2   = data_in.readByte ();
               byte A3   = data_in.readByte ();
               byte MAC1   = data_in.readByte ();
               byte MAC2   = data_in.readByte ();
               byte MAC3   = data_in.readByte ();
               byte MAC4   = data_in.readByte ();
               byte MAC5   = data_in.readByte ();
               byte MAC6   = data_in.readByte ();
              displayMessage ("\nMAC :"+MAC1+">>>"+(char)(0x000000FF
&MAC1));
               displayMessage ("\nMAC :"+MAC2+">>>"+(char)(0x000000FF &
MAC2));
               displayMessage ("\nMAC :"+MAC3+">>>"+(char)(0x000000FF &
MAC3));   
ETC.

 &MAC1));
osservazione banale:
ma non dovresti convertirli in esadecimale quei valori (0x000000FF &
MAC1)???

 writes:
li> unsigned char A0; 
Devi tener presente che i byte in Java sono signed...
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico  
\/		    e allevatore di bug da competizione

                byte A0   = data_in.readByte ();
int A0 = data_in.readByte () && 0x000000FF;
Semplicemente, usi il tipo di dato superiore.

Ragazzi, forse sono un po' duro di comprendonio su questo ed ho seri
problemi sulla matematica esadecimale e sulle
trasformazioni... sto cercardo un esempio di souce code per risolvere
il problema...
ripeto,
typedef struct {
        unsigned char  MAC [6];
} CHSTRU;
JAVA
               byte MAC1   = data_in.readByte ();
               byte MAC2   = data_in.readByte ();
               byte MAC3   = data_in.readByte ();
               byte MAC4   = data_in.readByte ();
               byte MAC5   = data_in.readByte ();
               byte MAC6   = data_in.readByte ();
con un programma in C il risultato del campo MAC è 00 D8 1B AB CD A6,
ed in JAVA non riesco proprio a leggerlo...
Abbiate pietà di me, dtemi una mano a trovare qualche sorgente di
prova...
Grazie mille anticipatamente e spero di ricambiare il disturbo al piu'
presto.

 ed in JAVA non riesco proprio a leggerlo...
ma che significa non riesco proprio a leggerlo?
erorre? si blocca tutto? stampa dati incoerenti?
ad esempio, quel DataInputStream da dove salta fuori?

praticamente in Java, se stampo le variabili con System.out.println()
ad es. MAC1,MAC2 etc vengono fuori dei numeri,
se li stampo come char vengono fuori caratteri strani, insomma facendo
girarre l'oggetto dovrebbe venire fuori
00 D8 1B AB CD A6, sicuramente esadecimale, ma sono confuso sul da
farsi.
grazie



java 1.5:
displayMessage ("\nMAC :"+MAC1+">>>"+
 String.format("%02X", 0x000000FF & MAC1)
);
java 1.4:
displayMessage ("\nMAC :"+MAC1+">>>"+
 Integer.toHexString(0x000000FF & MAC1).toUpperCase()
);
ma non fa il padding con gli 0.

grazie mille... grazie davvero a tutti....