2

Bond C# 手册中,它记录了以下内容:

以下这些更改将破坏线路兼容性,不推荐:

  • 添加或删除必填字段
  • 字段类型的不兼容更改(上面未涵盖的任何类型更改);例如:int32 转字符串,字符串转 wstring
  • ...

但它没有解释为什么。这里的用例是我正在使用将 C# 应用程序与 C++ 后端连接起来的 Bond。该字段当前是一个字符串。我想将其更改为 wstring。该手册指出,C# 字符串可以处理 C++ 字符串和 C++ wstrings。因此,为什么我不能将字段类型从字符串更改为 wstring?为什么这个断线兼容?

4

1 回答 1

1

在 Bond 的二进制格式中,字符串是 UTF8 编码的(没有 BOM),而 wstrings 是 UTF16-LE 编码的。如果要将字段从字符串切换到 wstring,读取端会尝试将 UTF8 数据解释为 UTF16-LE 数据。这两种编码彼此不兼容,因此从字符串到 wstring 的字段类型更改是一个重大更改。

请注意,手册中说“例如 C#string可以表示Bond 类型 stringwstring.”。它没有说明 C++ 类型。在跨 C# 和 C++ 使用 Bond 时,存在三种类型系统:Bond's、C#'s 和 C++'s。

如果在 C++ 方面,您想使用类似的东西std::wstring将字段存储在内存中,请查看使用带有字符串概念的自定义类型映射

于 2018-07-17T23:20:27.710 回答