gehe ich davon haben die struct Foobesseren Weg, um Strukturgröße (#pragma pack VS definierten Größe) Bezug zu nehmen
struct Foo{
int a;
short b;
char c;
};
und ich habe diese Struktur in N/w-Puffer zu schreiben. Ich muss die Größe dieser Struktur wissen. In meiner Umgebung gibt sizeof (Foo) 8 zurück, das ist in Ordnung, ich verstehe.
Dies sind zwei Wege, um die genaue Größe zu beziehen, die ich
1. #define SIZEOF_FOO 7
, in den Puffer schreiben wollen Und das sizeof(Foo)
statt
2. Durch die Verwendung von #pragma pack
verwenden, so kann ich sizeof(Foo)
verwenden denen zurück 7
Welcher ist der bessere Weg, oder gibt es einen anderen Weg, dies zu tun?
Was ist deine Absicht? Zu jeder Zeit die Größe von Foo zu kennen oder die Größe von Foo auf einen bestimmten Wert zu setzen? In der Tat, sizeof (Foo) gibt die tatsächliche Größe von Foo zurück, und Ihre Erwartung, dass es 7 ist, ist falsch. Sie müssen die tatsächliche Anzahl der Bytes in den Puffer schreiben, nicht die Nummer, die die Struktur haben soll. Wenn Sie Konstanten verwenden, wird auch nicht garantiert, dass sowohl der Absender als auch der Empfänger die gleiche Größe wie Foo haben. – mbaitoff
Nun, der Punkt ist der Empfänger ist in dem anderen System, und es erwarten die ersten 4 Bytes "a" -Wert, und so weiter, nächste 2 Bytes ist "b", nächste 1 Byte ist c. Es ist das Problem, wenn es Padding 0 nach "c" bezüglich der Schreibgröße 8 (von sizeof) anstelle von 7 hinzufügt. Und es beschädigt den Puffer-Stream. – Summerpinn