2017-10-28 3 views

Antwort

4

Sie können die Bits Byte für Byte in ein Integer-Objekt kopieren. Aliasing mit char ist erlaubt. Dann können Sie die Bits dieser Ganzzahl verschieben und maskieren, um die Werte einzelner Bits zu erhalten.

Der einfachste Weg, byteweise zu kopieren, ist std::memcpy. Sie müssen sicherstellen, dass Ihr Integertyp groß genug ist.

double myval = 1.3; 
unsigned long long myval_int = 0; 
static_assert(sizeof myval_int == sizeof myval); 
std::memcpy(&myval_int, &myval, sizeof myval); 
std::cout << std::hex << myval_int; 

Für einen besseren Weg, um sicherzustellen, dass Sie entsprechend dimensionierte Integer-Typ haben, sehen http://www.boost.org/doc/libs/1_65_1/libs/integer/doc/html/boost_integer/integer.html

Beachten Sie, dass das Kopieren Beginn der Ganzzahl in funktioniert nur, wenn die ganze Zahl die gleiche Größe hat - oder wenn Integer größer ist, dann muss die CPU Little Endian sein. Wenn Integer größer ist und CPU Big Endian ist, müssen Sie mit einem Offset kopieren.

+0

statische Behauptung scheint der beste Weg, und das erfordert keine Boost –

+0

@ Acidzombie24 Sie können immer diese Vorlagen immer wieder implementieren, wenn Sie bevorzugen. – user2079303

+0

Ist das memcpying zu lange wirklich erlaubt? Ich glaube, das bricht eine Art C++ - Regel. –

Verwandte Themen