uint8_t
シリアル化してファイルに書き込みたいタイプの変数があります(少なくともWindowsでは、これは私が目指しているものであり、移植性が高いはずです)。
バイナリ形式でファイルに書き込もうとすると、次の作業スニペットに出くわしました。
uint8_t m_num = 3;
unsigned int s = (unsigned int)(m_num & 0xFF);
file.write((wchar_t*)&s, 1); // file = std::wofstream
まず、このスニペットが何をするのかを理解していることを確認させてください - それは私の var (基本的に unsigned char で、長さは 1 バイトです) を受け取り、それをunsigned int
(4 バイトの長さで、あまり移植性がありません) に変換し、 & 0xFF
"最下位バイトのみを抽出します。
今、私が理解していないことが2つあります:
- なぜそれを最初に変換する
unsigned int
のですか、なぜ単に or のようなことをできないのです
file.write((wchar_t*)&m_num, 1);
かreinterpret_cast<wchar_t *>(&m_num)
? (参照) - より長いタイプ、たとえば a
uint64_t
(8 バイトの長さ) をシリアル化するにはどうすればよいですか?unsigned int
ここで十分かもしれませんし、十分でないかもしれません。