怎么实现 buffer to base62

2023-01-30 18:06:38 +08:00
 liuidetmks

搜了下,大部分是都是数字 uint64 to base62

没有 buffer to base62 的,( buffer 可能很大,几十上百 k 甚至 M )

通过栈溢出 找到一篇 string to base62

但是他好像就是 用 9A 9B 9C 代表 62 63 64 ,这应该不算是 base62 吧

989 次点击
所在节点    程序员
11 条回复
Nazz
2023-01-30 18:10:35 +08:00
为什么不用 base64
ysc3839
2023-01-30 18:16:52 +08:00
啥语言?
liuidetmks
2023-01-30 18:20:30 +08:00
@ysc3839 随便什么语言吧,伪代码就行
ysc3839
2023-01-30 18:28:10 +08:00
@liuidetmks 那照着 base64 或者 base58 的代码改改就好了呀,原理是相通的
tool2d
2023-01-30 18:33:50 +08:00


我写的算法,用来压缩中文文件名的,只支持了 250 左右长度的 buffer 字符串压缩。

你可以修改一下,只要大数计算类支持,可以支持几 K 长度 buffer 。你几兆长度,切分一下就是了。
liuidetmks
2023-01-31 09:43:25 +08:00
@ysc3839 原理不相通啊,64 正好是 6bit ,可以直接一一对应,62 不是 2^n , 需要做除法,如果一个 buffer 有 10M ,对 10M 长度大数做除法,可能有些问题


@tool2d 你这个是把 buffer 按照 2048 切分,然后拼接字符串吗, 接受方也要按照这个方式切片才能识别
(而不是把整个 buffer 作为大数)
tool2d
2023-01-31 10:20:14 +08:00
@liuidetmks "而不是把整个 buffer 作为大数", 当然可以啊。

我只是说贴出来的代码是有精度判断。

任何语言的大数类,只要你内存够大,大数长度都是没有限制的,随便你设置多少。
liuidetmks
2023-01-31 10:23:07 +08:00
@tool2d 好吧,看来没有一个简单的方法可以完成 base62,必须引入大数类做除法
iqoo
2023-01-31 11:49:30 +08:00
用 9A 9B 9C 代表 62 63 64 就是转义的思路,实现最简单,可直接复用 base64 模块,但效率会略低点。

整个 buffer 做大数编码效率最高,但开销大。

按一定长度切开做大数,编码效率和开销大之间做平衡。
ysc3839
2023-01-31 11:51:45 +08:00
@liuidetmks 多谢指正,那 base58 呢?
vvhy
2023-01-31 12:18:49 +08:00
刚刚看了一篇 base58 的文章,不知道是否有帮助 https://wyhaines.io/base58-what-is-it-why-use-it

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/911727

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX