Newsgroup: it.comp.java
Titolo: occhio per occhio sessantaquacchio

avrei bisogno di un metodo che non comporti perdita di informazione e 
soprattutto funzionante per compiere queste 2 semplici operazioni:
prendere 8 dati di tipo byte "concatenarli" e creare un dato di tipo double.
prendere un double "dividerlo" e creare 8 dati di tipo byte.
help. saluti.



Ciao, in questo momento non ricordo molto bene, ma dovrebbero esserci dei 
comandi (per es: somma su bit, ecc.) per agire direttamente sui bit delle 
variabili, le API dovrebbero esserti di aiuto.

 variabili, le API dovrebbero esserti di aiuto.
ehm... sei stato esaurientissimo -_-



Gurda i seguenti metodi statici:
Double.doubleToLongBits
Double.longBitsToDouble
lavorano con dei long, ma e' abbastanza semplice separare un long in 4
byte, e viceversa.
-- 
Lucio Benfante
Brainbench MVP for Java 1
http://www.brainbench.com
MyTranscript: 
http://www.brainbench.com/transcript.jsp?pid=167064

 byte, e viceversa.
ehm ... dato che č semplice :)))
mi dici come cosě avrai risolto interamente il mio problema e riceverai 
una birra in omaggio?

ehm ... dato che è semplice :)))
Non è difficile se sai come è fatto un long e come è fatto un byte...
Detto brevemente (e un po' grossolanamente):
- da byte[] a long, prendi un byte alla volta e fai un OR bit a bit con il 
long, poi fai uno shift a sinistra di 8 posizioni sul long e ripeti;
- da long a byte[]... fai il contrario :-)
Non vorrai che ti si scriva il codice, vero? ;-)
HTH
-- 
Ciao
	Fabrizio C.

 HTH
SIIIIIIIIIIII VOGLIO IL CODICE...
ehm... no ok adesso ci provo, al massimo torno a stressare su questo ng 
se non funziona ...

 long, poi fai uno shift a sinistra di 8 posizioni sul long e ripeti;
torno a stressare
scusa ma che mi serve l'or bit a bit ?

scusa ma che mi serve l'or bit a bit ?
A scrivere i bit del byte sul long nel modo piů "raw" possibile (AFAIK). 
:-)
-- 
Ciao
	Fabrizio C.



...spero che tu abbia gia' risolto. Ad ogni modo ti scrivo un po' di
codice di esempio, con gli int per brevita' (ma la birra la voglio lo stesso :-)):
Integer v = Integer.valueOf("0000001"+"10000000"+"01000000"+"00100000", 2);
int iv = v.intValue();
System.out.println(iv);
System.out.println(Integer.toBinaryString(iv));
System.out.println(Integer.toString(iv, 2));
// da int a bytes
int k;
k = iv & 255;
System.out.println(Integer.toString(k, 2));
iv >>= 8;
k = iv & 255;
System.out.println(Integer.toString(k, 2));
iv >>= 8;
k = iv & 255;
System.out.println(Integer.toString(k, 2));
iv >>= 8;
k = iv & 255;
System.out.println(Integer.toString(k, 2));
// da bytes a int
int a=1, b=2, c=4, d=8;
iv = 0;
iv |= a;
iv <<= 8;
iv |= b;
iv <<= 8;
iv |= c;
iv <<= 8;
iv |= d;
System.out.println(Integer.toString(iv, 2));
Fai attenzione che i tipi interi in Java sono tutti con segno. Cio'
significa che non puoi utilizzare una variabile di tipo byte per
memorizzare 8 bit (senza segno), ma una di tipo int, altrimenti nel
momento in cui fai l'assegnazione il valore ti viene modificato.
Osserva anche che la stringa con cui costruisco l'Integer e' formata da
31 cifre. Infatti la 32-ma non puo' essere utilizzata (a parte zeri che
vengono ignorati), dato che corrisponde al bit di segno, che nel formato
per il metodo valueOf si esprime facendo precedere il numero binario dal
segno - (in ogni caso ottiene dei bit diversi, dato che viene convertito
in complemento a 2). Se poi un 1 come 32 cifra ottieni una
NumberFormatException.
Perche' non memorizzi l'intero nel suo complesso (quello che ti
restituisce Double.doubleToLongBits) invece di scomporlo in byte?
