首先也是最重要的:在这种特定情况下,JSON 和 XML 不是一个选项,请不要推荐它们。如果这更容易接受这个事实,想象一下我打算重新发明轮子进行自我教育。
回到正题:
我需要设计一种二进制安全的数据格式来编码我发送到我编写的特定哑服务器的一些数据报(如果这很重要,则使用 C 语言)。
为了简化问题,假设我只发送数字、字符串和数组。
重要事实:服务器不(也不应该)知道任何关于 Unicode 和东西的事情。它将所有字符串视为二进制 blob(并且从不查看它们内部)。
我最初设计的格式如下:
- 数据报:
<Number:size>\n<Value1>...<ValueN>
- 价值:
- 数字:
N\n<Value>\n
- 细绳:
S\n<Number:size-in-bytes>\n<bytes>\n
- 大批:
A\n<Number:size>\n<Value0>...<ValueN>
- 数字:
例子:
[ 1, "foo", [] ]
序列化如下:
1; 数据报中的项目数 一个 ; - 大批 - 3;数组中的项目数 N; - 数字 - 1; 数值 ; - 细绳 - 3;字符串大小(以字节为单位) 富; 字符串字节 一个 ; - 大批 - 0; 数组中的项目数
问题是我无法在 JavaScript 中可靠地获取以字节为单位的字符串大小。
所以,问题是:如何改变格式,让一个字符串既可以保存在 JS 中,又可以巧妙地加载到 C 中。
我不想向服务器添加 Unicode 支持。
而且我不太想在服务器上解码字符串(例如,从 base64 或简单地转义 \xNN 序列) - 这需要使用动态字符串缓冲区,考虑到服务器的愚蠢程度,这并不是那么理想......
有什么线索吗?