Ich habe eine Variable vom Typ uint8_t
, die ich serialisieren und in eine Datei schreiben möchte (was ziemlich portabel sein sollte, zumindest für Windows, was ich anstrebe) .Umwandlung eines uint8_t in seine binäre Darstellung
in einer Datei in seiner binären Form schreiben Der Versuch, kam ich accross diesem Arbeits Schnipsel:
uint8_t m_num = 3;
unsigned int s = (unsigned int)(m_num & 0xFF);
file.write((wchar_t*)&s, 1); // file = std::wofstream
Lassen Sie mich zunächst sicher, ich verstehe, was diese Schnipsel tut - es ist mein var nimmt (Das ist im Grunde ein Zeichen ohne Vorzeichen (1 Byte lang), wandelt es in ein unsigned int
um (das 4 Byte lang und nicht so tragbar ist) und & 0xFF
"Extrakte" nur das niedrigstwertige Byte.
Nun gibt es zwei Dinge, die ich nicht verstehe:
- Warum es in
unsigned int
in erster Linie konvertieren, warum kann ich nicht einfach etwas tun, wie
file.write((wchar_t*)&m_num, 1);
oderreinterpret_cast<wchar_t *>(&m_num)
? (Ref) - Wie würde ich einen längeren Typ serialisieren, sagen Sie eine
uint64_t
(die 8 Bytes lang ist)?unsigned int
kann oder kann hier nicht genug sein.
Dieser Code ist schrecklich, nicht tragbar und hat undefiniertes Verhalten. Es zielt auch auf einen Strom von breiten Zeichen, die Sie wahrscheinlich nicht sind. –
Hi @AlanStokes, danke für deinen Kommentar. Können Sie bitte erläutern, warum dieser Code schlecht und nicht tragbar ist? Was wäre ein weiserer Weg, das zu tun? – Asaf