Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11163[/thread]

pack/unpack

Leser: 3


<< >> 9 Einträge, 1 Seite
SuKo
 2008-01-21 11:37
#104973 #104973
User since
2006-07-17
3 Artikel
BenutzerIn
[default_avatar]
Hi,

ich hab einen Stream $stream = 1100111110100010111010101...
den möchte ich dann in einen Stream von HEX Zahlen umwandeln.

Hab mir folgendes überlegt

Code: (dl )
1
2
3
4
5
6
7
8
9
for ($a=0; $a<length($finalStream);$a+=8 )
{
my $bits = substr ($finalStream,$a,8);

my $length = 8 - length($bits);
for (1..$length){$bits.=0}
my $hex = pack( 'H*', $bits );
$HEX.=$hex;
}

was mach ich falsch, denn bei z.B. 11001111 sollte CF rauskommen und nicht < <<;

Danke
pq
 2008-01-21 13:12
#104975 #104975
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Code (perl): (dl )
my $hex = sprintf "%x", oct("0b$bin");
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
SuKo
 2008-01-21 13:24
#104977 #104977
User since
2006-07-17
3 Artikel
BenutzerIn
[default_avatar]
versteh ich zwar gar net, aber danke!
kristian
 2008-01-21 13:43
#104978 #104978
User since
2005-04-14
684 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo

perldoc -f oct
perldoc -f sprintf

Code: (dl )
1
2
3
4
5
perl -wle '
my $bin = "11001111";
my $hex = sprintf "%X", oct("0b$bin");
print $hex;
'

CF

Gruss
Kristian
pq
 2008-01-21 14:05
#104979 #104979
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
SuKo+2008-01-21 12:24:52--
versteh ich zwar gar net, aber danke!

perldoc -f oct
oct() wandelt strings aus oktal in dezimal um. falls der string 0b oder 0x enthält,
wird aus binär bzw. hexadezimal umgewandelt.

perldoc -f sprintf
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Taulmarill
 2008-01-21 15:18
#104984 #104984
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Der vollständigkeit halber. So geht mit pack/unpack:
Code (perl): (dl )
unpack( "H*", pack( "B*", $bin ) )

Die Klammern habe ich nur gesetzt um zu verdeutlichen, was wozu gehört. Es funktioniert auch ohne.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
betterworld
 2008-01-21 20:25
#104996 #104996
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
pq+2008-01-21 13:05:05--
oct() wandelt strings aus oktal in dezimal um.


Hm, "dezimal" würde ich da vielleicht nicht sagen, sondern vielmehr "in einen richtigen Integerwert" oder so.
Linuxer
 2008-01-21 20:32
#104998 #104998
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
naja, der "Zahlenwert" ist (im vorliegenden Fall) doch Integer, egal ob die Darstellung octal, hexadezimal oder dual erfolgt. Die Umwandlung erfolgt ins Dezimalsystem. (Welches wir dann wieder als "richtig" empfinden.)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
murphy
 2008-01-22 11:16
#105013 #105013
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Linuxer+2008-01-21 19:32:58--
naja, der "Zahlenwert" ist (im vorliegenden Fall) doch Integer [...] Die Umwandlung erfolgt ins Dezimalsystem.


Der "Zahlenwert" ist im vorliegenden Fall kein Integer, sondern eigentlich ein String, und die Umwandlung erfolgt von ASCII ins Binärsystem. Erst bei der Ausgabe wird standardmäßig von der internen Binärdarstellung wieder in eine Dezimaldarstellung mit ASCII-Zeichen konvertiert.

Die Tatsache, dass Perl zwischen Strings, die eine ASCII-Zeichensequenz aus dezimalen Ziffern enthalten, und der internen Darstellung von Integer und Fließkommazahlen automatisch konvertiert, verschleiert allerdings den Unterschied zwischen diesen grundlegend verschiedenen Datentypen (was meiner Meinung nach selbst bei einer schwach typisierten Sprache ein echter Designfehler ist, aber das ist Geschmackssache).
When C++ is your hammer, every problem looks like your thumb.
<< >> 9 Einträge, 1 Seite



View all threads created 2008-01-21 11:37.