Byte-Array mit Hex-Werten in Integer umwandeln

Hallo Leute,

wieder mal so eine kleine Herausforderung…

Eingangsinformation sind drei Bytes, wobei diese jeweils zwei Hex-Werte repräsentieren.
Ich möchte nun diese drei „Hex“-Bytes addieren. Geht das in einem Schritt?
Habe es mit der pack-Funktion probiert, komme da aber nicht zu Ziel:

$Byte[0] = 255;
$Byte[1] = 0;
$Byte[2] = 0;

$Value = pack("HHH", $Byte[0], $Byte[1], $Byte[2]);
Echo intval($Value);

Die „Triviallösung“ wäre sicherlich die drei Bytes in die sechs Hex-Werte aufzusplitten, jeweils in einen Hex-Wert (String) umzuwandeln, den String zusammenzufügen und aus dem Hex-Wert einen Integer-Wert zu machen. (Funktionen dechex und hexdec).

Aber geht das auch „schlanker“? Oder ist mein gedanklicher Ansatz schon falsch?

Joachim

Bytes sind doch schon Zahlen :slight_smile:

So ?


$Byte[0] = 255;
$Byte[1] = 0;
$Byte[2] = 0; 

$Summe = (($Byte[0] << 16) | ($Byte[1] << 8) | $Byte[2]);
echo $Summe;

Michael

PS: Pack ist eh falsch, unpack wenn schon. Aber dann aber so


$Summe = unpack('N',chr(0).chr($Byte[0]).chr($Byte[1]).chr($Byte[2])); // chr um daraus einen Byte-String für unpack zu machen
var_dump($Summe);

Hallo Michael,

ich war verunsichert weil im Datenblatt explizit steht, in den drei Bytes sind die Werte in Form von sechs hexadezimalen Werten vorhanden.
Als ich jetzt es parallel zu meinem Posting noch einmal probiert habe, die Bytes aufzusplitten und mir im Einzelnen als Hex-Werte anzuzeigen wurden meine Zweifel noch größer.
Daher kann ich dann quasi die drei Bytes nehmen, als MSB, LSB, XLSB aneinanderreihen und den Gesamtwert direkt bilden - manchmal steht man halt auf dem Schlauch…:wink:

Danke!

Joachim

1 Byte sind in hexadezimaler Schreibweise immer 2 Zeichen, somit haben die schon Recht.
Michael