【问题标题】:Serialize a string in binary with C# and deserialize it with C++使用 C# 序列化二进制字符串并使用 C++ 反序列化
【发布时间】:2018-10-07 22:41:44
【问题描述】:

我正在努力寻找一种有效的方法来将可能包含 unicode 和非 unicode 字符的字符串序列化为二进制数组,然后将其序列化为必须使用 C++ 反序列化的文件。

我已经在 C++ 中实现了一个序列化器/反序列化器,我用它来完成我的大部分序列化,它可以处理 unicode 和非 unicode 字符(基本上我将非 unicode 字符转换为它们的 unicode 等效项并将所有内容序列化为 unicode字符串,不是最有效的方法,因为现在每个字符串每个字符都有 2 个字节但可以工作)。

我想要实现的是将任意字符串转换为每个字符串 2 个字节,然后我可以从 C++ 反序列化。

实现我所寻找的最有效的方法是什么?

此外,任何关于我序列化字符串方式的建议当然都会得到很好的接受。

【问题讨论】:

  • Encoding.Unicode.GetBytes("my string")
  • 对不起@Evk,你的评论是正确的(不敢相信我尝试了每个编码错过的Unicode......)但我不能接受评论作为答案:(。如果你添加它作为答案,我很乐意接受,但现在我会接受 kinimod 的回答
  • 这不是你不能接受的问题,主要是你得到了答案。请注意,您可能会考虑改用 UTF-8(.net 中的Encoding.Unicode 是 UTF-16),因为 UTF-8 将 ascii 范围编码为一个字节,并且该范围很常见。为此,您当然需要调整 C++ 部分。
  • 是的,事实上我使用的是 UTF-8,每个字符只得到 1 个字节(使用 ASCII 字符进行测试)。我想知道我应该如何在 C++ 端调整我的代码,因为它可以节省大部分字符串的一半空间
  • 我敢打赌 C++ 有自己的标准编码方式,所以“我已经在 C++ 中实现了一个序列化器/反序列化器”应该是不必要的

标签: c# c++ string serialization unicode


【解决方案1】:

Encoding.Unicode.GetBytes("my string") 将字符串编码为 UTF-16,每个字符的大小为 2 个字节。因此,如果您仍在搜索另一种选择,请考虑编码。

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多