Tom: Ingeter/float aus Byte Array

Beitrag lesen

Hello,

zeig doch bitte Deinen ganzen bisherigen Code, bitte mit guten Kommentaren dazu, was Du Dir dabei gedacht hast und was dabei wirklich herausgekommen ist.

Wenn Du es nicht nachher tatsächlich ber Bitoperatoren erledigen willst, dann ist die Unpack()-Funktion aber schon der richtige Weg dafür.

Dazu müssen die Byte-Werte in einem String angeordnet werden. Dieser kann dann mittels unpack() behandelt werden.

Hallo Tom,
so viel kompletten Code habe ich noch nicht.
Aber ich bin deinem Tip mit unpack() nochmal gefolgt, und für einen signed int funktionert es jetzt zumindest

/* Rohdaten */
$data = Array(0xff, 0xff, 0x30, 0x39);

/* Im Array $data ab Position 0 */
$x = toSint16($data, 0);
echo "x= ". $x . "\n";

/* Im Array $data ab Position 2 */
$x = toSint16($data, 2);
echo "x= ". $x . "\n";

function toSint16($arr, $pos)
{
$val = unpack("s", chr($arr[$pos + 1]) . chr($arr[$pos]));
return $val[1];
}


>   
> Muss mal sehen ob ich meine anderen Datentypen mit diesem Prinzip auch erschlagen bekomme, und ob das ganze maschinenunabhänging ist.  
  
Ich verstehe nicht ganz, woher Du die Daten bekommst und warum Du sie dann erst in einem Array parken musst. PHP speichert die numerischen Werte, so wie Du sie ins Array speicherst, als Integer mit üblicherweise 4 Byte.  
  
Wie das nun bei der 64-Bit-Version ist, kann ich nicht beantworten.  
  
Du willst aber augenscheinlich Lowbyte und Highbyte separat erfassen. Dann solltest Du diese in eine Byte-(Zeichen-)Kette schreiben, bei PHP auch als Single-Byte-String bezeichnet.  
  
Solche Dinge, wie Big-Endian, Little-Endian usw. musst Du dann entsprechned beachten.  
  
  
  
  
  
  
  
  
Liebe Grüße aus dem schönen Oberharz  
  
  
Tom vom Berg  
![](http://selfhtml.bitworks.de/Virencheck.gif)  
  

-- 
 ☻\_  
/▌  
/ \ Nur selber lernen macht schlau  
<http://bergpost.annerschbarrich.de>