pl: C Pointerei

Beitrag lesen

hi Rolf,

wenn ich in C die Zahl 53 als 16 Bit BE haben will, notiere ich 0x00 und 0x35 in 2 Oktetten und gut is. Und so muss ich in C mit einem DNS Header verfahren:

Sho h[6] = {
   htons(0xACDC),  // Identyfier
   htons(0x0100),  // Standard Query
   htons(0x0001),  // One Question
   0, 0, 0         // Answer RRs, Authority RRs, Additional RRs
};

Weil ich weiß daß C intern ein 0xACDC als LE auffasst, also muss ich das rumdrehen. Mit Perl, was auf derselben Maschine läuft, ist eine solche Konvertierung nicht notwendig, wenn ich da $h[0] = 0xACDC; notiere kommt das mit derselben Byteorder am Server an.

Mit

printf("%#02x ", $_) for unpack("W*", pack L=>0x12345678);

kannst Du übrigens testen, welche Architektur vorliegt, zum Ergebnis siehe perldoc -f pack

MfG