Effiziente Methode von byte[4] nach hex[8] gesucht

jabonva

Grünschnabel
Hallo,

ich möchte aus einem vierstelligen Bytefeld einen achtstelligen Hexstring erzeugen und diesen anschließend in einen Dezimalwert umrechnen. Das Codebeispiel stellt meinen Weg dar, um das Ziel zu erreichen. Ich vermute jedoch, daß dieser Weg nicht der effizienteste ist, da langsam. Wer kennt einen besseren Weg?

Gruß
jabonva
Code:
public class test
{
	public static void main( String[] args )
	{
		//Ausgangssituation (hex->00000100; dez->256)
		byte[] data = new byte[4];
		data[0] = 0;
		data[1] = 1;
		data[2] = 0;
		data[3] = 0;

		//aus data wird ein hexString erstellt
		String a = Integer.toHexString(data[0]);
		if ( a.length() == 1 ) a = new String("0"+a);
		String b = Integer.toHexString(data[1]);
		if ( b.length() == 1 ) b = new String("0"+b);
		String c = Integer.toHexString(data[2]);
		if ( c.length() == 1 ) c = new String("0"+c);
		String d = Integer.toHexString(data[3]);
		if ( d.length() == 1 ) d = new String("0"+d);
		String hexString = new String(d+c+b+a);

		//Hexstring (00000100) nach Dezimal (256)
		int number = Integer.parseInt(hexString, 16);
	}
}
 
Moin,

wenn ich Dich richtig verstehe, suchst Du wohl sowas :
Java:
public static int makeInt(byte[] aByte) 
{
    int nRes = 0;
    try 
    {
        nRes =   (toUnsignedInt(aByte[0]) 
               | ( (toUnsignedInt(aByte[1])) << 8) 
               | ( (toUnsignedInt(aByte[2])) << 16) 
               | ( (toUnsignedInt(aByte[3])) << 24) );
    }
    catch (Exception ex) 
    {}
    return nRes;
}

Gruß
Klaus
 
Zuletzt bearbeitet:
Hallo,

alternativ könnte man auch einen ByteBuffer verwenden:

Java:
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class test {
	public static void main(String args[]) {
		//Ausgangssituation (hex->00000100; dez->256)
		byte[] data = new byte[4];
		data[0] = 0;
		data[1] = 1;
		data[2] = 0;
		data[3] = 0;
		
		ByteBuffer bb = ByteBuffer.wrap(data);
		bb.order(ByteOrder.LITTLE_ENDIAN);
		int number = bb.getInt();
		System.out.println(number); // => 256
	}
}

Grüße,
Matthias
 
Zurück