嘿,我正在尝试编写一个程序,将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个部分?
只想要数学,我能处理的代码只是这个过程令我感到困惑。谢谢:))
答案 0 :(得分:8)
这是一个将在任意两个基础之间转换的函数列表:https://sites.google.com/site/computersciencesourcecode/conversion-algorithms/base-to-base
编辑(希望完全清楚......)
您可以在Wikipedia entry for Base 64找到更多相关信息。
用于base 64的习惯字符集与您在编辑之前提供的链接中找到的字符集不同,是:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
字符'A'是值0,'B'是值1,'C'是值2,...'8'是值60,'9'是值61,'+ '是值62,'/'是值63.这个字符集与我们习惯用于二进制,八进制,基数10和十六进制的字符集非常不同,其中第一个字符是'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
现在我们可以将所有位推到一起(这些空间只是帮助人们读取数字):
000001011010111011111110001010100011110111001101
接下来,我们可以从最低有效位开始,每四位引入一个新的空白分隔符:
0000 0101 1010 1110 1111 1110 0010 1010 0011 1101 1100 1101
现在应该很容易看到这个数字如何转换为基数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
答案 1 :(得分:0)
将base-64视为基础(2 ^ 6) 所以为了与十六进制半字节对齐,你需要至少2个64位数...
有2个base-64位数字你有一个base(2 ^ 12)数字,可以用3 2 ^ 4个数字表示......
(00)(01)(02)(03)(04)(05)---(06)(07)(08)(09)(10)(11) (base-64) maps directly to:
(00)(01)(02)(03)---(04)(05)(06)(07)---(08)(09)(10)(11) (base 16)
所以你可以转换为连续的二进制...或者使用4个操作......操作可以处理二进制值,或者它们可以使用一组查找表(可以对char编码的数字起作用):
这样做的好处是你可以在没有二进制转换的情况下处理编码的基础。 在chars流中很容易做到......我不知道这实际上是在任何地方实现的。