在读一段 C++ 代码,并想要用 Go 重写其逻辑。C++ 的相关代码是这样的:
std::stringstream buffer;
valhalla::baldr::TrafficTileHeader header = {}; // 这是一个 struct
// 此处省略若干字段赋值
header.last_update = last_update_timestamp;
buffer.write(reinterpret_cast<char*>(&header), sizeof(header));
这段代码的作用简单来说是创建一个 header 对象(不熟 C++,不知道这么称呼是否正确?),对其中的字段进行一些赋值后写到一个 stringstream 里。后续会把这个 buffer 写入文件。
我在尝试用 Go 重写这个过程,目的是产生相同格式的文件,让另外一个程序读取。我的关键代码如下:
buf := &bytes.Buffer{}
header := TrafficTileHeader{
// 省略若干字段赋值
LastUpdate: uint64(time.Now().Unix()),
}
binary.Write(buf, binary.BigEndian, header)
然后把 buf 的内容写入一个文件。在文本编辑器中比较 C++ 和 Go 输出的文件,虽然内容是二进制,但字符结构看起来结构差异非常大,目标程序无法识别 Go 输出的文件。
reinterpret_cast<char*>(&header)
等价的操作,从而得到一致的结果?上文 C++ 代码段所在的源文件:
谢谢各位耐心阅读!🙏
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.