将BASE64字符串转换为BASE16(HEX)字符串?

eve*_*veo 5 c

嘿,我正在尝试编写一个程序,从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个部分?

只想要数学,我能处理的代码只是这个过程令我困惑.谢谢 :)

oos*_*wal 8

这是一个功能列表,可以在任意两个基础之间进行转换:https://sites.google.com/site/computersciencesourcecode/conversion-algorithms/base-to-base


编辑(希望完全清楚......)

您可以在Basepedia 64Wikipedia条目中找到更多相关信息.

用于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)

  • @soju:...所以6位你可以在0到63(含)之间任意数字--64个不同的值.或者换句话说,64个不同的字符.巧合的是,base 64使用64个不同的字符来表示0到63的值.每个base 64字符具有6位的唯一模式. (2认同)