[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: gcc und 32bit grenze



Michael Ott <michael@zolnott.de> writes:
> Ich lese gerade mittels socket eine Struct, das sich nicht an die
> 32bit-Grenze nicht hält. 
> 
> Ich habe folgendes Strukt:
> struct {
> 	char[10];
> 	int;
> }
> und genau das bekomme ich über das Netz, nur das er mir wirklich 10bit
> und danach die Zahl bringt,

Nachdem andere Deine Alignment-Probleme anscheinend mittels gcc-pragmas
gelöst haben, noch ein Tip:

int ist ein gänzlich untauglicher Typ, um Daten über Netzwerke
auszutauschen, nimm lieber gleich uint32_t und achte daran, stets mittels
htonl in Dein host-seitiges System zu wandeln. Sonst hast Du keine
Freude, wenn Du obigen Code unter MacOS X oder Linux/Sparc zum Laufen
bringst. Denn auch wenn es für über 99% der heute laufenden Systeme
stimmt, daß ein int 32bit hat und Zweierkomplement verwendet, gibt es
keine Garantie, daß das so bleibt und schon gar nicht war es immer so.

Der portable Weg, um das richtige Padding zu erzeugen, ist übrigens der,
alles als char-Arrays zu definieren und mittels einzelner Operationen in
int zu wandeln, sonst verabschiedet sich der Code mit dem von Dir
angestrebten Padding auf einigen Architekturen mittels SIGBUS. Die
Alternative zu handkodierten char-Arrays sind Bibliotheken wie XDR von
Sun.

Thomas Jahns
-- 
"Computers are good at following instructions,
 but not at reading your mind."
D. E. Knuth, The TeXbook, Addison-Wesley 1984, 1986, 1996, p. 9



Reply to: