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

时间:2011-04-03 22:46:51

标签: 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

从BASE64转换为HEXIDECIMAL的逻辑是什么?
为什么十进制表示法会分开?
为什么二进制表示被分成6个部分?

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

1 个答案:

答案 0 :(得分:4)

一次读取base64 4个字符,因为4个base64字符变为3个字节:

'Ba7+', 'Kj3N'

解码base64的每个char。我刚看了Wikipedia

[1, 26, 59, 62], [10, 35, 55, 13]

将每组中的数字分别向左移动18,12,6和0:

>>> def pack(a, b, c, d): return hex((a << 18) + (b << 12) + (c << 6) + d)
>>> pack(1, 26, 59, 62)
'0x5aefe'
>>> pack(10, 35, 55, 13)
'0x2a3dcd'

然后,如果你想自己转换为十六进制,请将它们向右移动4,8,... 24,28以剥离每个nybble并转换为从0到f的数字。