[PHP] Hexadecimale waarden in een switch/case loop

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • EelCapone
  • Registratie: December 2000
  • Laatst online: 14-07 09:10

EelCapone

Ik kom je halen!

Topicstarter
Ik loop tegen een probleem aan met het verwerken van hexadecimale waarden in een switch/case loop. Dit doe ik:
PHP:
1
2
3
4
5
6
7
8
9
10
11
while (!feof($handle)) {
    $byte = fgetc($handle) 
    switch($byte) {
        case 0x00 :
            echo '0x00';
            break;
        case 0x01 :
            echo '0x01';
            break;
    }
}

Nu werkt dit perfect voor de waarden 0x00 t/m 0x09, maar alles van 0x0A en hoger pakt ie niet. Hij gaat dan dus niet naar de code die bij 'case 0x0A' staat. Het lijkt net alsof ie die waarden niet herkent. Ik heb al geprobeert om andere notaties te gebruiken (0xa, 0xA, 0x0a, 0x0A, \x0a, \x0A, '\x0A') maar dat hielp niet.

Waarschijnlijk komt het omdat er bij de switch statement een string wordt ingelezen en bij de case statements een integer wordt opgegeven, maar $byte converteren naar een integer d.m.v. settype($byte, 'integer') hielp ook niet.

Heeft iemand enig idee wat ik hier over het hoofd zie?

Acorn BBC B [ 65C02@2MHz; 32k RAM; Solidisk Sideways 128k; Solidisk 1770 ADFS; Econet ]


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

PHP kan impliciet noch expliciet een character of byte naar int casten zoals je dat in C gewend bent, omdat characters in PHP "gewoon" strings zijn. Als je een string "a" naar een int cast, probeert hij de waarde van de string als integer te parsen. Voorbeeld:

PHP:
1
2
3
4
5
<? 
echo (int) "a";
echo "\n";
echo (int) "7"; 
?>

Uitvoer:
0
7
Je zult dus moeten switchen op de ascii waarde van het karakter, met behulp van ord ().

[ Voor 8% gewijzigd door drm op 08-08-2005 15:29 . Reden: domme typo ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • EelCapone
  • Registratie: December 2000
  • Laatst online: 14-07 09:10

EelCapone

Ik kom je halen!

Topicstarter
Dank je!

Acorn BBC B [ 65C02@2MHz; 32k RAM; Solidisk Sideways 128k; Solidisk 1770 ADFS; Econet ]


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
of je convert even naar integers mbv hexdec()

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info