Thread pack/unpack Daten von Socket (27 answers)
Opened by monti at 2012-11-22 19:47

FIFO
 2012-11-24 13:13
#163592 #163592
User since
2005-06-01
469 Artikel
BenutzerIn

user image
2012-11-24T10:04:09 monti
Ich habe die Daten nun allerdings in nem Skalar und nicht in nem Array.
Dachte kurz daran sie byteweise zu splitten


Das funktioniert so nicht, weil der Perl-String nicht einfach ein 8bit-Bytestring wie der gepackte Skalar ist Du nicht den Character, sondern den Code des Characters verwenden musst:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
my @rawdata = (49, 70, 55, 54, 52, 49, 2, 28, 0, 9, 0);
my $data = pack('C*', @rawdata);

# transmission of packed data ...

my @received = unpack('C*', $data);

# Funktionierende Variante:

print join('', map {sprintf('%02X', $_)} @received);

# Versuch, den gepackten String zu splitten, um an die einzelnen
# Elemente zu kommen:

print "\n";
print join('', map {sprintf('%02X', $_)} split(//, $data));

# Es geht mit der Verwendung von ord():

print "\n";
print join('', map {sprintf('%02X', ord($_))} split(//, $data));


Ausgabe:
Code: (dl )
1
2
3
314637363431021C000900
0100070604010000000000
314637363431021C000900


Editiert von FIFO: Begründung falsch formuliert
Last edited: 2012-11-24 13:28:26 +0100 (CET)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

View full thread pack/unpack Daten von Socket