我需要知道如何能将下面的字符串转换成数字,有什么办法能实现这个?
下面我会列三组内容给大家作为尝试,希望大家帮忙提供一下具体的实现方式和逻辑。
字符串:228660261,6922,1001568,33,6,354,2022-10-20,15:00-15:30
转换后数字:5114218495424546770
字符串:210027390,6922,1001568,9,5,314,2022-10-19,10:00-10:30
转换后数字:8950638048021313960
字符串:210030754,6922,1001568,10,5,314,2022-10-19,10:00-10:30
转换后数字:3255733186603065445
我是通过ASII来解决的,期中用了MD5加密使其格式为数字和字母,如下:
```python
from hashlib import md5
def input_num(data):
a=md5()
b=data.encode()
a.update(b)
result=a.hexdigest()
list_1=[]
for i in result:
if i.isdigit():
list_1.append(i)
list_1.append(str(ord(i)))
result_num=''.join(list_1)
print(result_num)
data='228660261,6922,1001568,33,6,354,2022-10-20,15:00-15:30;1666225243265'
input_num(data)
```
看不出来,参数太多了,根本没法猜测,这种加密的除了加密者,其他人猜测不了,现在大概就能看出来最后一个数据是时间戳截取了13位,这也符合加密的常用参数,时间戳最常用…
可以用 字符串 Hash
虽然不能保证唯一,但碰撞的概率非常小(大概在 2
的 64
次方左右,既2e20
),可以满足使用的需要
#include <iostream>
#include <string>
using namespace std;
typedef unsigned long long ULL;
#define HASH_K 13331
ULL Hash(string str)
{
ULL ret = 0;
for(char& c : str)
ret = ret * HASH_K + int(c);
return ret;
}
string str;
int main()
{
while(getline(cin, str))
cout << Hash(str) << endl;
}