5

有谁知道用于将许多基本类型(如整数、浮点数、字符串等)编码为字符串但保留类型的字典顺序的库?

理想情况下,我正在寻找一个 C++ 库,但其他语言也可以。此外,可以假设格式不需要在字符串本身中进行编码(也就是说,如果它是 int64/string/float 则编码后的字符串不需要对这些信息进行编码,只需对数据进行编码就足够了)。

4

4 回答 4

10

看一下这篇论文(“数字的高效字典编码”),它展示了如何将任何数字类型表示为字符串,这样字符串的字典顺序与基础数字的数字顺序相同。它处理任意长度的数字。

http://www.zanopha.com/docs/elen.pdf

于 2010-07-29T19:48:34.957 回答
2

我遇到了将整数和长整数转换为保留顺序的字符串的问题。而且由于我在 Java 中工作,所以我只有签名类型。

我的算法很简单:

  1. 翻转符号位(toEncode ^ Long.MAX_VALUE对于长整数),否则负数大于正数。
  2. 对字节进行修改后的 base64 编码。不幸的是,正常的 base64 编码不保留排序;特殊字符 (+/) 在字符之后的数字之后。这与 ASCII 完全相反。我修改后的编码仅使用 ASCII 排序。(为了明确这不是正常的 base64,我将特殊字符更改为-_with~作为填充。这些仍然可以在 URL 中使用,这是我遇到的另一个约束。)
于 2012-07-07T23:44:58.877 回答
2

顺便说一句……在 Amazon Web Service 的 SimpleDB 中,所有数据都存储为字符串。它的选择比较器使用字典顺序。AWS 提供实用函数来编码各种类型。例如,先验地知道整数的范围并通过零填充和偏移量(例如,对于负整数)对整数进行编码。你当然可以给它最差的范围。

请参阅“查询 201:Amazon SimpleDB 查询的提示和技巧”- http://aws.amazon.com/articles/1232

http://typica.s3.amazonaws.com/com/xerox/amazonws/sdb/DataUtils.html

于 2013-02-19T03:33:37.560 回答
-1

只需在固定列宽中写入带有前导零的数值,并像往常一样写入字符串。所以像这样:

0.1 -> 0000000.1000000
123 -> 0000123.0000000
foo -> foo
X   -> X

然后您可以按文本排序(例如sort,没有Unix 的 Unix -n)。那个怎么样?

于 2009-11-19T13:02:06.467 回答