20 Stimmen

Ganze Zahlen mit fester Breite in C++

Gelegentlich muss ich Ganzzahlen mit fester Breite für die Kommunikation mit externen Geräten wie SPSen verwenden. Ich verwende sie auch, um Bitmasken zu definieren und Bitmanipulationen an Bilddaten durchzuführen. AFAIK der C99-Standard definiert feste Breite Ganzzahlen wie int16_t. Der von mir verwendete Compiler, VC++ 2008, unterstützt C99 jedoch nicht, und Microsoft plant meines Wissens auch nicht, ihn zu unterstützen.

Meine Frage ist, was ist die beste Praxis für die Verwendung von Fixed-Width-Ganzzahlen in C++?

Ich weiß, dass VC++ Nicht-Standard-Ganzzahlen mit fester Breite wie __int16 definiert, aber ich zögere, einen Nicht-Standard-Typ zu verwenden. Wird der nächste C++-Standard Ganzzahlen mit fester Breite definieren?

0voto

Peter Punkte 1316

Es gibt verschiedene Wege, die man einschlagen kann. Die meisten Umgebungen würden behaupten, dass short int s sind 16 Bit, und long int s sind 32. (Die long wird impliziert, wenn Sie einfach deklarieren int .) Wenn Sie typedef einen eigenen int16-Typ zu verwenden, werden Sie wahrscheinlich mit einem short int .

Eine andere Möglichkeit sind Bit-Felder in Structs. Sie können etwas sagen wie:

struct x {
    int a : 16;
    int b : 5;
    ...
};

Und so weiter. Wenn Sie dann definieren:

struct x myvar;
myvar.a = 54;

Sie können sicher sein, dass myvar.a 16 Bits und myvar.b 5 Bits enthält; die Gesamtgröße von myvar wird aufgerundet und entspricht der Größe aller Bits, plus natürlich der Größe aller anderen Felder.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X