2010-12-04 7 views
2

Support J'ai certaines données brutes hexadécimales imprimées en utilisant un code c avec un format tel que "% 02X".
ils ressemblent:perl: Comment décoder les données hexadécimales en entier, chaîne?

\x00\x20\x00\x10\xfd\x02\x10\x00\x00\x00\x00\x20\xff\x02\x10\x00\x00\x00\x00\x00 \x05\x00\x011\x00\x01\x00\n\x00\x0240

Je veux les décoder suivant un format comme:
Les deux premiers hex octets « \ x00 \ x20 » devrait être décodé à un ushort:
ci-dessous deux B hexadécimal "\ x00 \ x10" doivent être décodés en un ushort:
Le 8B hexadécimal "\ xfd \ x02 \ x10 \ x00 \ x00 \ x00 \ x00 \ x20" doit être codé en 64 bits.
L'hexagone 8B suivant "\ xff \ x02 \ x10 \ x00 \ x00 \ x00 \ x00` \ x00" doit être codé sur un 64 bits;
Les 3 octets suivants doivent être décodés à 3 caractères.
....

Comment puis-je mettre en œuvre le décodage en perl
(BTW, je ne comprends pas pourquoi il y a entre chaque barre oblique inverse hex, comment est-il hex doit être imprimé)?

Répondre

1

s{\\x(..)}{chr hex $1}eg; pour des octets uniques. ou simplement unpack("v", "\x00\x20"); (voir la fonction décompresser pour plus de détails).

+0

#!/Usr/bin/perl -w $ _ = "\ x61 \ x62"; s {\\ x (..)} {chr hex $ 1} ex. print "approche1: $ _ \ n"; $ str2 = décompresser ("v", "\ x61 \ x62"); affiche "approach2: $ str2 \ n"; – user389955

+0

la réponse est: bash-3.00 # ./hex2str.pl approche1: ab approche2: 25185 – user389955

+0

En effet. Et cela dépend entièrement de ce que vous voulez quelle approche vous utilisez. Un jour vous dites ushort (court de Perl n'ayant pas de "shorts" - "\ x61 \ x62" est une chaîne, "ab" est une autre chaîne, et 25185 est un nombre, habituellement avec une capacité de int), donc utilisez l'approche 2 ; l'autre vous dites "hex2str", utilisez donc appoach 1. – user502515

0
  1. Décoder les données:
    • s/\\x(..)/chr hex $1/eg/;
    • Mieux encore, supposant que vous avez le contrôle sur le code C qui génère l'entrée, l'obtenir aux données binaires de sortie en premier lieu et éviter tout cette étape.
  2. Utilisez unpack pour décoder les composants.
Questions connexes