在Bond C# manual中,它指出以下内容:
以下更改将破坏电线的兼容性,因此不建议使用:
- 添加或删除必填字段
- 字段类型的不兼容更改(上面未涵盖的任何类型更改);例如:将int32转换为字符串,将字符串转换为wstring
- ...
但这并不能解释原因。这里的用例是,我使用的是将C#应用程序与C ++后端连接的Bond。该字段当前是一个字符串。我想将其更改为wstring。手册指出,C#字符串可以处理C ++字符串和C ++ wstring。因此,为什么我不能只将字段类型从字符串更改为wstring?为什么这种断线兼容?
答案 0 :(得分:0)
在Bond的二进制格式中,字符串是UTF8编码的(没有BOM),而字符串是UTF16-LE编码的。如果要将字段从字符串切换为wstring,则读取端将尝试将UTF8数据解释为UTF16-LE数据。这两种编码互不兼容,因此从字符串到wstring的字段类型更改是一个重大更改。
请注意,手册中指出“例如C#string
可以代表债券类型 string
或wstring
”。它没有说任何有关C ++类型的信息。在C#和C ++上使用Bond时,有三个类型的系统:Bond,C#和C ++。
如果在C ++方面,您想使用类似于std::wstring
的方式来将字段存储在内存中,请看一下将Custom type mapping与string concept一起使用。