Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
php hex in binär umwandeln und nibbles auswerten [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
php hex in binär umwandeln und nibbles auswerten


 
wallnerm
16-05-2006, 19:59 
 
Hallo,

versuch gerade einen hexadezimalen String in binär umzuwandeln und dann die binären Nibbles auszuwerten:

Folgender hex-String ist gegeben: "F03C"
Wenn man das in binär umwandelt ergibt das lt. Taschenrechner: 1111000000111100

Habe mit folgendem den String erst mal in hex gewandelt:
$in_bitmap_bin = pack("H*", $in_bitmap);

Wie kann ich nun am besten auswerten, welche Bits gesetzt sind. Gehen wir mal davon aus, dass es rechts mit 1 beginnt.

Also:
1 -> nicht gesetzt
2 -> nicht gesetzt
3 -> gesetzt
4 -> gesetzt
usw.

Wer kann mir helfen ??

dankeschön

 
wahsaga
16-05-2006, 20:18 
 
Original geschrieben von wallnerm
Wie kann ich nun am besten auswerten, welche Bits gesetzt sind.
$binaerString = '1111000000111100';
for($i=0,$l=strlen($binaerString); $i<$l; $i++) {
echo 'Bit '.($l-$i).' ist'.($binaerString{$i} ? '' : ' nicht')." gesetzt<br />\n";
}

 
wallnerm
16-05-2006, 20:47 
 
Hab das jetzt übernommen. wenn man den binären string vorgibt gehts, aber bei der Wandlung hex in bin stimmt noch was nicht.


// in binär wandeln
$in_bitmap_bin = pack("H*", "F03C");

// Schleife
for($i=0,$l=strlen($in_bitmap_bin); $i<$l; $i++)
{
echo 'Bit '.($l-$i).' ist'.($in_bitmap_bin{$i} ? '' : ' nicht')." gesetzt<br />\n";
}

Hier kommt dann:

Bit 2 ist gesetzt
Bit 1 ist gesetzt

heraus.
Das stimmt ja allein von der Länge strlen nicht. 4 Hexzeichen müssen ja 16 Bits geben.

 
MarkusW
16-05-2006, 20:55 
 
hallo?! noch nie was von bit operatoren gehört?!
also mal ehrlich! diese methode gehört verboten! (sorry)


function bitisset($num, &$field) {
return ($field & (1 << ($num - 1)));
}


gibt true zurück wenn das $num-te bit in $field gesetzt is sonst natürlich false.

ob man der funktion jetzt ne hexzahl übergibt oder ne dezimal is egal.
aber achtung: hexzahl ist nicht hexstring!

 
wallnerm
16-05-2006, 22:01 
 
hab leider noch nie was mit binären daten oder konvertierungen gemacht.
Je praktischer die Lösung umso besser:

Wie geht das denn dann mit Strings ?
Es fehlt mir dann immer noch an den Konvertierungen


// Funktionsdefinition für bitisset
function bitisset($num, &$field) {
return ($field & (1 << ($num - 1)));
}

// Ursprungsstring
$in_message = "0350F03C000020808081F0F74"

// bitmap wird aus dem Ursprunsstring geholt ab F03C...
$in_bitmap = substr($in_message,4 , 16);

// Feststellen welche Bits gesetzt sind im ersten Halbbyte
echo bitisset(1, $in_bitmap);

 
MarkusW
16-05-2006, 22:35 
 
// Funktionsdefinition für bitisset
function bitisset($num, &$field) {
return ($field & (1 << ($num - 1)));
}

// Ursprungsstring
$in_message = "0350F03C000020808081F0F74"

// bitmap wird aus dem Ursprunsstring geholt ab F03C...
$in_bitmap = substr($in_message,4 , 16);

// hex in dezimal konvertieren
$in_bitmap = base_convert($in_bitmap, 16, 10);

// Feststellen welche Bits gesetzt sind im ersten Halbbyte
echo bitisset(1, $in_bitmap);


aber was willst du eigendlich machen?

 
wahsaga
17-05-2006, 09:54 
 
Original geschrieben von MarkusW
hallo?! noch nie was von bit operatoren gehört?!
Doch, klar.
aber achtung: hexzahl ist nicht hexstring!
Eben deshalb hatte ich mein Beispiel ja so gewählt - weil ich davon ausging, dass er wirklich mit seinem Binärstring weiterarbeiten will ...


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:53 Uhr.