2011-11-17T18:15:24 GwenDragonIch bin nicht sicher, ob es in diesem Fall, weil UDP-Traffic übers Netz, aber das pack-Template n sein müsste.
1
2
3
4
5
6
7
typedef struct test
{
uint8t zahl1;
uint16_t zahl2;
int32_t zahl3;
uint8t zahl1;
};
Quotec A signed char (8-bit) value.
C An unsigned char (octet) value.
W An unsigned char value (can be greater than 255).
s A signed short (16-bit) value.
S An unsigned short value.
l A signed long (32-bit) value.
L An unsigned long value.
q A signed quad (64-bit) value.
Q An unsigned quad value.
(Quads are available only if your system supports 64-bit
integer values _and_ if Perl has been compiled to support those.
Raises an exception otherwise.)
2011-11-18T10:46:56 GwenDragon[...]
Das Template bei
für pack dürfte dann sein: CSlC.
Ungetestet.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
my $zahl1=23; my $zahl2=42; my $zahl3=0815; # unsigned 8bit Integer (Char -> C) # unsigned 16bit Integer (Short -> S) # signed 32bit Integer (Long -> l) # unsigned 8bit Integer (Char -> C) ## Little Endian (X86 Order) # on x86 Processors #my $out=pack('CSlC',$zahl1,$zahl2,$zahl3,$zahl1); # on PPC or other not x86 Processors force Little Endian #my $out=pack('C<S<lC',$zahl1,$zahl2,$zahl3,$zahl1); # Big Endian (Network Order) my $out=pack('C>S>lC',$zahl1,$zahl2,$zahl3,$zahl1); print SOCKET $out;
Quote2. Frage:
Wenn ich jetzt ein int mit 4 Bytes habe, wie kann ich dies Byteweise auseinander nehmen und in ein Bytearray schreiben?
1
2
3
a A string with arbitrary binary data, will be null padded.
A A text (ASCII) string, will be space padded.
Z A null-terminated (ASCIZ) string, will be null padded.
$binary=pack('C*',split(//,$string));
2011-11-22T08:13:04 campbell-bsJa, es geht in die Richtung, aber wie kann ich einen beliebig langen String in ein Bytearray aufteilen und dies verschicken?
my $byteRec = pack "Z100", $oktetten;
my $len_in_bin = pack "N", length $oktets;