Schrift
[thread]1115[/thread]

wie schreibt man das folgende in C?: pack/unpack



<< >> 4 Einträge, 1 Seite
steffenw
 2004-06-24 00:45
#11071 #11071
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
my $bytes = pack 'N/a*', pack (
 'a a3 a*',
 '0',
 '004',
 pack('n/a*', 'nr')
.pack('n/a*', '123456')
.pack('n/a*', 'pos')
.pack('n/a*', '123'),
);
\n\n

<!--EDIT|steffenw|1088024094-->
$SIG{USER} = sub {love 'Perl' or die};
esskar
 2004-06-24 01:54
#11072 #11072
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
erklär mir, was du tun willst?

was bringt N/a* und n/a* ?
coax
 2004-06-24 07:00
#11073 #11073
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=esskar,23.06.2004, 23:54]was bringt N/a* und n/a* ?[/quote]
a* => mit nullen aufgefuellte ASCII-Zeichenfolge
n => vorzeichenloser short Wert Netzwerk-Ordnung (Big Endian)
N =>  -"- long -"-

N/a* bedeutet dann: Laenge von a* in N verpacken und a* anhaengen, bzw.: stelle dem ASCII-String seine Laenge als long Big Endian Wert voran.
,,Das perlt aber heute wieder...'' -- Dittsche
steffenw
 2004-06-24 09:43
#11074 #11074
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
4 Byte in Netzwerkordnung für die Anzahl aller nachfolgender Bytes
1 Byte (feste Länge)
3 Byte (feste Länge)
gefolgt von Name-/Wert-Paaren:
- Name: Länge Name als 2 Byte in Netzwerkordnung, dann die Bytes für den Name selbst
- Wert: Länge Wert als 2 Byte in Netzwerkordnung, dann die Bytes für den Wert selbst

Übrigens wird bei a* nicht mit Nullen aufgefüllt, nur wenn man anstatt * z.B. 10 angibt und als String z.B. nur 5 Bytes, dann sind die restlichen 5 Bytes natürlich irgendwie zu belegen und das ist bei a eben NUL.

So eine Struktur mit Perl zusammenzupacken ist wirklich supereinfach. Der Sinn ist ein Protokoll zur Übertragung einer dynamischen Struktur (Hash-ähnlich) per Socket. Ein Kollege hat das dann in VB machen müssen, da ging die Rechnerei mit den Längen schon los, niederwertiger Teil, höherwertiger Teil, usw. Es kommt in den nächsten Wochen der Moment, wo ein Rechner das mit C machen muß, da wollte ich schon mal wissen, ob es da vielleicht auch eine einfache, mir bisher unbekannte Variante gibt.\n\n

<!--EDIT|steffenw|1088056689-->
$SIG{USER} = sub {love 'Perl' or die};
<< >> 4 Einträge, 1 Seite



View all threads created 2004-06-24 00:45.