我有一个类型的变量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(它基本上是一个无符号字符,1 个字节长),将它转换成一个unsigned int
(4 个字节长,不那么便携),并使用& 0xFF
“提取”仅最低有效字节。
现在,有两件事我不明白:
- 为什么首先将其转换为
unsigned int
,为什么我不能简单地做类似的事情
file.write((wchar_t*)&m_num, 1);
orreinterpret_cast<wchar_t *>(&m_num)
?(参考) - 我将如何序列化更长的类型,比如 a
uint64_t
(8 字节长)?unsigned int
这里可能不够,也可能不够。