C Pointerei
bearbeitet von plhi Rolf,
wenn ich in C die Zahl 53 als 16 Bit BE haben will, notiere ich 0x0035 und gut is. Und so muss ich in C mit einem DNS Header verfahren:
~~~c
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](http://rolfrost.de/perldoc.html?f=pack)
MfG
C Pointerei
bearbeitet von plhi Rolf,
wenn ich in C die Zahl 53 als 16 Bit LE haben will, notiere ich 0x0035 und gut is. Und so muss ich in C mit einem DNS Header verfahren:
~~~c
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](http://rolfrost.de/perldoc.html?f=pack)
MfG