C++ 保持词典顺序的基元类型的字符串编码
有人知道一个库可以将许多基本类型(如整数、浮点数、字符串等)编码成字符串,但保留类型的名称吗C++ 保持词典顺序的基元类型的字符串编码,c++,string,encode,lexicographic,C++,String,Encode,Lexicographic,有人知道一个库可以将许多基本类型(如整数、浮点数、字符串等)编码成字符串,但保留类型的名称吗 理想情况下,我正在寻找C++库,但其他语言也很好。此外,可以假设格式不需要在字符串本身中编码(即,如果它是int64/string/float,则编码的字符串不需要对该信息进行编码,仅对数据进行编码就足够了)。只需在固定的列宽中写入数值,并使用前导零,并将字符串作为正常字符串。所以像这样: 0.1 -> 0000000.1000000 123 -> 0000123.0000000 foo -
理想情况下,我正在寻找C++库,但其他语言也很好。此外,可以假设格式不需要在字符串本身中编码(即,如果它是int64/string/float,则编码的字符串不需要对该信息进行编码,仅对数据进行编码就足够了)。只需在固定的列宽中写入数值,并使用前导零,并将字符串作为正常字符串。所以像这样:
0.1 -> 0000000.1000000
123 -> 0000123.0000000
foo -> foo
X -> X
然后,您可以按文本排序(例如,Unix排序
,而不使用-n
)。怎么样?看看这篇论文(“数字的有效字典编码”),它展示了如何将任何数字类型表示为字符串,这样字符串的字典顺序与基础数字的数字顺序相同。它可以处理任意长度的数字
我遇到了将整数和long转换为保留顺序的字符串的问题。因为我在Java工作,所以我只有签名类型 我的算法非常简单:
toEncode^Long.MAX_VALUE
表示Long),否则负数大于正数+
和/
)位于字符后面的数字之后。这与ASCII完全相反。我修改的编码只是使用ASCII排序。(为了说明这不是正常的base64,我将特殊字符改为-
和-
,并使用~
作为填充。这些字符在URL中仍然可用,这是我的另一个限制。)你能澄清你想要什么吗?你所说的整数和浮点数的字典顺序是什么意思?它们的字典排序取决于您对它们的编码方式,例如二进制、八进制、十进制、十六进制等(假设前导数字已删除),所有这些都将为给定的数字列表提供不同的字典排序。所谓字典排序,我指的是原始类型的原始顺序(显然不是字符串)。例如,将“(a,b,c)”编码为字符串“s”,这样“(a,b,c)<(a',b',c')”就意味着所有a,b,c的“s
'+'
字符具有较低的整数值43和'0'
(整数值48)。这提供了不正确的排序语义。通过使用ASCII平面中较高的字符,例如'='
(整数值61),即使在比较具有不同前缀字符数的字符串时,也会给出正确的结果。您的修改后的Base 64编码器是否是任何开源Java库的一部分?