请教如何进行编码???up有分,在线等待!!!

wwsatan 2003-10-09 11:10:27
大家都知道base64编码可以把输入的字符串或数据编码成只含有{'A'-'Z', 'a'-'z', '0'-'9', '+', '/'}这64个可打印字符的串,故称为“Base64”。

现在我想编码成只含有{ 'A'-'Z', 'a'-'z', '0'-'9'}这62个可打印字符的串,姑且称为“Base62”吧,不知该如何实现?

请大家不吝赐教!

...全文
83 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
muffing 2003-10-10
  • 打赏
  • 举报
回复
搬把椅子, 坐下,学习!
joyiii 2003-10-10
  • 打赏
  • 举报
回复
gz
wwsatan 2003-10-10
  • 打赏
  • 举报
回复
开始上班,先顶一把,大家继续来关注把
ink8852 2003-10-09
  • 打赏
  • 举报
回复
gz
theone 2003-10-09
  • 打赏
  • 举报
回复
楼上说得很好了
feeboby 2003-10-09
  • 打赏
  • 举报
回复
up
duqiang2050 2003-10-09
  • 打赏
  • 举报
回复
你要base62编码也能做到,先看base64编码:
Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再映射到{'A'-'Z', 'a'-'z', '0'-'9', '+', '/'}字符上,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3

如果m个base62的BYTE能表示n个正常的byte的话,必然有 256^n=62^m,左面的约数只有2,所以右面也必须只有2,所以右面的底数只能是32、16、8、4、2而不能是62(64也不行,超过了62)。所以底数比较适合取32,既256^5=32^8,也就是5个正常字节用8个base62字节标识(确切地说是base32),这样的编码实际是base32,不过为了使用上全部的62个字符,可以在向字符坐映射的时候作些手脚,比如奇数字节映射到前32个字符上,偶数字节映射到后32个字节上,实际是base32的变种
sky51fly 2003-10-09
  • 打赏
  • 举报
回复
编码,我很感兴趣的

明天再看,现在没时间
hbb1981 2003-10-09
  • 打赏
  • 举报
回复
up
duqiang2050 2003-10-09
  • 打赏
  • 举报
回复
所以说只替换“+/=”而其他码不变就不可能。要节省2个字母只有采用压缩算法,其他的编码的意义就不一样了。最简单的,可以采用霍夫曼(Huffman)编码。
wwsatan 2003-10-09
  • 打赏
  • 举报
回复
希望杜杜能给出替换的思路,效率先不考虑,采用base64查表,替换掉"+",“\”,“=”

我的想法是补位用的=号可以用固定的字符标志位来表示,随便用26个字符当中的一个就行,放在最后一位,因为位置固定且特殊,所以解码时不用担心字符内容本身的重复

那“+”“\”该如何替换呢?用62个字符中的来替换的话,比如用'a'来代替"+",那怎么区分被替换的'a'和未被替换本来就是的'a'呢?


duqiang2050 2003-10-09
  • 打赏
  • 举报
回复
你想替掉"+","\"和"="是可以的,但是只替换“+/=”而其他码不便就不可能,也就是性质变了,变成压缩编码了,传输速度上去了,解压有费时了。这个先不说。

我前面说得“前32个”和“后32个”是可以重复的,确切地说,有一个字付重复,这样是为了按你的要求把62个字母都用上。如果不需要都用上,你的方法就很好。
wwsatan 2003-10-09
  • 打赏
  • 举报
回复
感谢杜杜和其他各位!

我原来的想法也是5*8=8*5,5个字节输入编码后输出8个字节,输出是a-z,0,1,2,3,4,5,不足5个字节的倍数时用6,7,8,9补齐,映射的结果字符集只有a-z,0-9

杜杜说的base62,可以根据奇偶字节分别去映射前后32个字符能说的详细点么?
我不大清楚

因为一共只有62个字符,而不是32+32=64个
“前后32个”的意思是不是指的只取前32个或者只取后32个?

再者,这种变形的结果比原字符长度增加了3/5,觉得冗余太大
有没有其他的方法,在base64的3*8=4*6基础上实现base62,映射的时候能否有办法替换掉特殊字符"+","\"和"="呢??
guankaifu 2003-10-09
  • 打赏
  • 举报
回复
up

up
在顶
up
接着顶
yintongshun 2003-10-09
  • 打赏
  • 举报
回复
帮楼主顶顶
hardstudylulin 2003-10-09
  • 打赏
  • 举报
回复
学习,帮你顶!
Paris_Luo 2003-10-09
  • 打赏
  • 举报
回复
gz
3684291 2003-10-09
  • 打赏
  • 举报
回复
学习
UP
wljcom 2003-10-09
  • 打赏
  • 举报
回复
学习~~~
mqbwx 2003-10-09
  • 打赏
  • 举报
回复
up 蹭分
加载更多回复(1)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧