Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di tridi9
    Registrato dal
    Apr 2002
    Messaggi
    346

    [JAVA] Da array di byte ad intero

    /*
    Ciao a tutti.
    L'obiettivo del metodo è quell di ricevere un array di byte e trasformare il loro valore in un intero.
    Parrebbe facile ma non è cosi', almeno fino ad ora non ci sono riuscito.
    il fatto è che io devo leggere i byte in modo sequenziale cioè come se fossero 16 bit:


    per intenderci

    esadecimale
    byte[0]=0x01;
    byte[1]=0x0A;

    oppure
    decimale
    byte[0]=1;
    byte[1]=10;

    binario!

    byte[0]=00000001;
    byte[1]=00001010;

    quindi

    risultato==0x010A=266;
    0000000100001010 = 266;

    e fino a qui, logicamente.. OK.

    Codice PHP:

    public class ProvaByte
    {
        public static 
    void main(String argd[])
        {
            
    byte arraybyte[]=new byte[2];
            
    arraybyte[0]=(byte)0x01;
            
    arraybyte[1]=(byte)0x0A;

            
    System.out.println(ProvaByte.toInt(arraybyte));

            }

    public static 
    int toInt(byte[] arraybyte)
    {

    //usando metodi toBinaryString elimina gli zeri prima dell' 1  001 diventa 1 e quindi non va bene,

    //non scrivo le mie varie prove, per non scrivere fesserie.


    try{

    }catch(
    Exception e)
    {
        
    System.out.println(e);

        }
    return 
    0;

    }



        } 

    Spero che qualcuno mi aiuti !

    ........‘’’........
    .......(o o).......
    ----ooO-(_)-Ooo----

  2. #2
    Utente di HTML.it L'avatar di tridi9
    Registrato dal
    Apr 2002
    Messaggi
    346
    praticamente dato un array di 2 byte devo creare uno short..

    ........‘’’........
    .......(o o).......
    ----ooO-(_)-Ooo----

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    codice:
    public class test {
      public static void main (String args[]) {
        byte arraybyte[]=new byte[2];
        arraybyte[0]=(byte)0x01;
        arraybyte[1]=(byte)0x0A;
        
        int a = (arraybyte[0] << 8) + arraybyte[1];
        
        System.out.println("risultato: "+a);
      }
    }
    effettua i casting necessari. ricevi un warning sulla perdita di precisione se dichiari a tipo short, ma se sei sicuro che sarà uno short...allora cast-a pure.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it L'avatar di tridi9
    Registrato dal
    Apr 2002
    Messaggi
    346
    funziona!
    Anche se non ho capito come ...
    facenfo lo shift dl primo byte di 8 verso destra bit, praticamente lo azzero(giusto?), poi sommo matematicamente il secondo byte.
    Cmq Ok

    ........‘’’........
    .......(o o).......
    ----ooO-(_)-Ooo----

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    no, lo shift è verso sinistra, per cui a destra entrano 8 bit posti a 0. A questi 8 bit aggiungi arraybyte[1]

    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it L'avatar di tridi9
    Registrato dal
    Apr 2002
    Messaggi
    346
    Si, verso sinistra, ho sbagliato a scrivere.
    Ma come ?
    il primo byte del mio intero lo metto tutto a 0 ?

    sommo il secondo byte a che cosa 0 ?
    Oppure : i bit che vengono shiftati a sinistra non scompaiono ma finiscono nei bit successivi dell'intero e quindi praticamente metto i bit del secondo byte al posto del primo ?

    p.s. grazie delle risposte.

    ........‘’’........
    .......(o o).......
    ----ooO-(_)-Ooo----

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    i bits che vanno verso sinistra sono i "most significant" (quelli importanti) per cui non scompaiono... fondamentalmente lo shift a sinistra equivale alla moltiplicazione per 2, per cui sono tutte cifre significative importanti.
    Ciao
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.