我正在研究C ++中的项目,该项目采用了来自golang项目的许多想法 我没有正确理解这个binary.write如何在documentation中工作,以及如何在C ++中复制它。我在项目中被困在这一行。
binary.Write(e.offsets, nativeEndian, e.offset)
e.offsets的类型为*bytes.Buffer
,e.offset为uint64
答案 0 :(得分:1)
在C ++标准库中,通常由您来处理字节序问题。所以我们暂时跳过它。如果您只想将二进制数据写入流(如文件),则可以执行以下操作:
uint64_t value = 0xfeedfacedeadbeef;
std::ofstream file("output.bin", ios::binary);
file.write(reinterpret_cast<char*>(&value), sizeof(value));
强制转换是必要的,因为文件流处理char*
,但你可以写任何你想要的字节流。
只要它们是“普通旧数据”(POD),您就可以用这种方式编写整个结构。例如:
struct T {
uint32_t a;
uint16_t b;
};
T value2 = { 123, 45 };
std::ofstream file("output.bin", ios::binary);
file.write(reinterpret_cast<char*>(&value2), sizeof(value2));
使用file.read
阅读这些内容是类似的,但如上所述,如果你真的关心endian,那么你需要自己照顾它。
如果您正在处理非POD类型(例如std::string
),那么您将需要处理更复杂的数据序列化系统。如果需要,有很多选择可以解决这个问题。