Thread unverständnis zu sprintf (22 answers)
Opened by also at 2010-08-13 21:19

topeg
 2010-08-14 11:08
#140679 #140679
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Code (perl): (dl )
1
2
$var=unpack('%8C*', $var);
return(sprintf("%.2X",$var));

Das ist so nicht ganz korrekt.

Erstens unpack hat ein anderes Format als sprintf. Zweitens bekommst du bei unpack eine Liste von Zahlen zurück, nicht nur ein einzige (sofern $var mehr als ein Zeichen enthält). Und dritens ist die Deklaration in sprintf nicht korrekt.

Man kann es so machen, obwohl ich nicht weiß wie dein restlicher Code aussieht.
Code (perl): (dl )
1
2
3
4
5
6
7
8
# aus dem binärdaten eine Liste von Zahlen machen
my @chars=unpack('C*', $var);

# jede zahl in HEX umwandeln;
$_=sprintf('%02X',$_) for(@chars);

# Liste zu einem mit Leerzeichen getrennten String zusammen führen
$var=join(' ',@chars);


Das kann man auch in eine Zeile schreiben:
Code (perl): (dl )
$var=join(' ',map{sprintf('%02X',$_)}unpack('C*', $var));


Wenn du eine Sprache nicht beherrscht und falsche Annahmen (alles hat das selbe Format) dann bekommst du seltsame Ergebnisse. Weiterhin wunder ich dass perl an den Stellen keine Wahrungen geben hat nutzt du die Pragmas strict und warnings?

Beispiel:
Code (perl): (dl )
1
2
3
4
5
#!/usr/bin/perl
use strict;
use warnings;

#... more code ...


EDIT: falsche Anführungszeichen im Code
Last edited: 2010-08-14 11:45:28 +0200 (CEST)

View full thread unverständnis zu sprintf