J'ai récemment écrit un script qui analysait une représentation textuelle d'un seul champ de mois d'octet binaire.
(Ne demandez pas: - {)
Après avoir joué avec sprintf pendant un moment, j'ai abandonné et j'ai fait ça;
our %months = qw / x01 1
x02 2
x03 3
x04 4
x05 5
x06 6
x07 7
x08 8
x09 9
x0a 10
x0b 11
x0c 12 /;
...
my $month = $months{$text};
Avec quoi je m'en tire, car je n'utilise que 12 chiffres, mais y a-t-il une meilleure façon de faire cela?
Si tu as
$hex_string = "0x10";
vous pouvez utiliser:
$hex_val = hex($hex_string);
Et vous obtiendrez: $hex_val == 16
hex
ne nécessite pas le "0x
"au début de la chaîne. Si elle est manquante, elle traduira toujours une chaîne hexadécimale en nombre.
Vous pouvez également utiliser oct
pour traduire des chaînes binaires, octales ou hexadécimales en nombres basés sur le préfixe:
0b
- binaire0
- octal0x
- hexadécimalSi je comprends bien, vous avez 1 octet par mois - pas de chaîne "0x10", mais plutôt un octet contenant 10.
De cette façon, vous devez utiliser npack :
my $in = "\x0a";
print length($in), "\n";
my ($out) = unpack("c", $in);
print length($out), "\n", $out, "\n"
production:
1
2
10
Si l'entrée contient 3 caractères, comme "x05", le changement est également assez simple:
my $in = "x0a";
my $out = hex($in);