【问题标题】:C# Bond: string to wstringC# 绑定:字符串到 wstring
【发布时间】:2018-07-18 07:21:17
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: bond


    【解决方案1】:

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

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

    如果在 C++ 端,您想使用类似于 std::wstring 的东西将字段存储在内存中,请查看使用 Custom type mappingstring concept

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 2011-10-20
      • 1970-01-01
      相关资源
      最近更新 更多