嘿,我正在尝试编写一个程序,从BASE64字符串转换为BASE16(HEX)字符串.
这是一个例子:
BASE64: Ba7+Kj3N
HEXADECIMAL: 05 ae fe 2a 3d cd
BINARY: 00000101 10101110 11111110 00101010 00111101 11001101
DECIMAL: 5 174 254 42 61 205
Run Code Online (Sandbox Code Playgroud)
从BASE64转换为HEXIDECIMAL的逻辑是什么?
为什么分割十进制表示?
为什么二进制表示被分成6个部分?
只想要数学,我能处理的代码只是这个过程令我困惑.谢谢 :)
这是一个功能列表,可以在任意两个基础之间进行转换:https://sites.google.com/site/computersciencesourcecode/conversion-algorithms/base-to-base
编辑(希望完全清楚......)
您可以在Basepedia 64的Wikipedia条目中找到更多相关信息.
用于base 64的习惯字符集与您在编辑之前提供的链接中找到的字符集不同,是:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
字符'A'是值0,'B'是值1,'C'是值2,...'8'是值60,'9'是值61,'+'是值62,而'/'是值63.这个字符集与我们习惯用于二进制,八进制,十进制和十六进制的字符集非常不同,其中第一个字符是'0',表示值0等
Soju在对这个答案的评论中指出,每个基数64位需要6位来表示二进制.使用原始问题中提供的base 64号码并从base 64转换为binary,我们得到:
B a 7 + K j 3 N
000001 011010 111011 111110 001010 100011 110111 001101
Run Code Online (Sandbox Code Playgroud)
现在我们可以将所有位推到一起(空间只是帮助人们读取数字):
000001011010111011111110001010100011110111001101
Run Code Online (Sandbox Code Playgroud)
接下来,我们可以从最低有效位开始,每四位引入一个新的空白分隔符:
0000 0101 1010 1110 1111 1110 0010 1010 0011 1101 1100 1101
Run Code Online (Sandbox Code Playgroud)
现在应该很容易看出这个数字如何转换为16:
0000 0101 1010 1110 1111 1110 0010 1010 0011 1101 1100 1101
0 5 A E F E 2 A 3 D C D
Run Code Online (Sandbox Code Playgroud)