我正在研究将base64转换为十六进制的问题,并以问题提示为例:
3q2+7w==
应该产生deadbeef
但是,如果我手动执行此操作,则使用base64数字集ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
会得到:
3 110111
q 101010
2 110110
+ 111110
7 111011
w 110000
作为二进制字符串:
110111 101010 110110 111110 111011 110000
分为四个部分:
1101 1110 1010 1101 1011 1110 1110 1111 0000
十六进制
d e a d b e e f 0
是不是deadbeef0
而不是deadbeef
?还是我在这里想念东西?
答案 0 :(得分:1)
Base64用于编码字节(8位)。
您的base64字符串包含6个字符和2个填充字符(=
),因此理论上您可以编码6 * 6bits = 36位,等于9个4位十六进制数字。但是实际上,您必须以字节为单位进行思考,然后您只有4个字节(32位)的重要信息。其余4位(额外的“ 0”)必须忽略。
您可以将无关紧要的位数计算为:
y : insignificant bits
x : number of base64 characters (without padding)
y = (x*6) mod 8
所以在您的情况下:
y = (6*6) mod 8 = 4
因此您最后需要忽略4个无关紧要的比特。