[PHP] Hex naar text

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met een scriptje om via SNMP wat devices uit te lezen. Dit gaat allemaal prima, alleen geeft 1 van de Access Points het volgende terug:
code:
1
Hex: 50 65 74 72 6F 63 65 6C 6C 69 2D 41 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Nu ben ik er na wat uitzoeken achter gekomen dat daar "Petrocelli-AP" staat. Hoe kan ik dit in PHP automatisch omzetten naar text? Dus als de string begint met "Hex: " moet het van hex naar text.

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Verwijderd schreef op dinsdag 04 april 2006 @ 16:04:
Hoe kan ik dit in PHP automatisch omzetten naar text? Dus als de string begint met "Hex: " moet het van hex naar text.
natuurlijk eerst beginnen door bijv dmv regex of gewoon substring te kijken of een regel begint met "Hex: "
vervolgens alles wat er na komt pakken, en alle spaties er uit rippen.
vervolgens loop je door de string heen, pak je telkens 2 tekens, en covert deze naar een letter, die je vervolgens uitpoept. (of iets anders mee doet)
dit doe je tot je string 'op' is, en dan ben je klaar

[ Voor 36% gewijzigd door BasieP op 04-04-2006 16:07 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • Joen
  • Registratie: Juli 2003
  • Laatst online: 09-08 18:34
^^ Wat hij zegt +
http://nl3.php.net/hex2dec

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

BasieP schreef op dinsdag 04 april 2006 @ 16:07:
dit doe je tot je string 'op' is, en dan ben je klaar
Lijkt me handiger om al te stoppen zodra je 00 tegekomt ;)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Janoz schreef op dinsdag 04 april 2006 @ 16:19:
[...]


Lijkt me handiger om al te stoppen zodra je 00 tegekomt ;)
geen flauw idee of dat kan, zo bekend ben ik niet met hex, kan er na een 00 niet nog meer data komen? of is 00 gelijk aan \0?

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
            if (eregi("Hex:", $name)) {
                $name = str_replace("Hex: ", "", $name);
                $name = explode(" ", $name);
                for ($x=0; $x<count($name); $x++) {
                    $byte = hexdec($name[$x]);
                    //en hier de dec omzetten naar een letter
                }
            }


Lijkt me prima zo :)

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Verwijderd schreef op dinsdag 04 april 2006 @ 16:21:
code:
1
2
3
4
5
6
7
8
            if (eregi("Hex:", $name)) {
                $name = str_replace("Hex: ", "", $name);
                $name = explode(" ", $name);
                for ($x=0; $x<count($name); $x++) {
                    $byte = hexdec($name[$x]);
                    //en hier de dec omzetten naar een letter
                }
            }


Lijkt me prima zo :)
yu, al zou ik persoonlijk "^Hex: " gebruiken, om te zien dat Hex: vooraan de string staat, en niet ergens in't midden.

verder zou je idd de opmerking van Janoz kunnen toepassen, scheeld weer wat cpu tijd ;)

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ach, hex is gewoon een 16 tallig getallen stelsel. Niks vreemds aan. Voordeel is dat je de bytes los hebt staan. de waarde 0 wordt in C over het algemeen gebruikt om aan te geven dat dat het einde van de string is. Zo te zien in het voorbeeld geldt dat daar ook (plus dat het als opvulteken wordt gebruikt). Het lijkt me dan voor deze toepassing ook niet nodig dat ook al die 00's worden omgezet in een \0.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
BasieP schreef op dinsdag 04 april 2006 @ 16:24:
[...]


yu, al zou ik persoonlijk "^Hex: " gebruiken, om te zien dat Hex: vooraan de string staat, en niet ergens in't midden.

verder zou je idd de opmerking van Janoz kunnen toepassen, scheeld weer wat cpu tijd ;)
Ik denk niet dat ik in het midden van een SNMP een Hex: ga vinden :) Maar op zich heb je wel gelijk, zo weet je het altijd zeker.
Die andere oplossing moet ik nog even uitwerken.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Regular expressions gebruiken alleen om de eerste paar letters van een string te bekijken is IMO een beetje overkill. Je kan daar beter strstr gebruiken, of stristr als je ook "hex" als begin wil kunnen ondersteunen in plaats van "Hex".

Overigens, zo te zien is het gewoon ASCII, wat het net even wat makkelijker maakt. Ik zou het zo oplossen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$uitvoer = "";
if (stristr($name, "Hex: ")) {
   $name = explode(" ", substr($name, 5));

   for ($i = 0; $i < count($name); $i++) {
      $byte = hexdec($name[$i]);
      if ($byte !== 0) {
         $uitvoer .= chr($byte);
      }
   }
   echo $uitvoer;
}

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb er een functie van gemaakt, maar het werkt perfect. Bedankt allen!
Pagina: 1