我的字符串格式为(0-9)(A-Z)(A-Z)(A-Z)(A-Z),例如0AAAA或7ZHSK等
我想要一种独立于平台的方式将其转换为唯一的小数。
我已经尝试过非常接近我想要的crc32,并且测试过所有4,569,760种可能的组合都没有碰撞。
我的问题是crc32在32位机器和64位机器上输出不同的结果,
有什么类似的工作吗?我需要使用多种语言的标准函数,因此不需要自定义函数。
编辑: 以下是在这两个位置运行的代码示例:
FrameworkElement
echo crc32('1AAAA');
output = -534072890
答案 0 :(得分:3)
为什么不使用场所值语义?结果只需要23位,因此它非常适合标准积分类型:
#include <cinttypes>
#include <string>
std::uint32_t to_int(std::string const & s)
{
return
(s[4] - 'A') * 1 +
(s[3] - 'A') * 26 +
(s[2] - 'A') * 26*26 +
(s[1] - 'A') * 26*26*26 +
(s[0] - '0') * 26*26*26*26;
}
(这假设您的字符串编码包含连续序列中的所有大写字母字符,例如UTF-8。)