2011-04-03 174 views
2

嘿,我試圖編寫一個程序來從BASE64字符串轉換爲BASE16(HEX)字符串。將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轉換爲十六進制的邏輯是什麼?
爲什麼十進制表示會分裂?
二進制表示怎樣分成6段?

只想要數學,我可以處理的代碼只是這個過程令我困惑。謝謝:)

+1

查看數學的[Base64維基百科文章](http://en.wikipedia.org/wiki/Base64)。 – pmg 2011-04-03 22:52:07

+0

重複的問題? http://stackoverflow.com/questions/5533430/transform-b​​ase64-string-to-base16hex-string/ – 2011-09-30 05:18:30

回答

4

閱讀的base64 4個字符的時間,因爲4個的base64字符成爲3個字節:

'Ba7+', 'Kj3N' 

解碼的BASE64的每個字符。我只是看着它掛在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之間的數字。

+0

好的,謝謝,我明白你的角色分工,但我失去了你在轉移。我們還沒有那麼遠,所以我不知道什麼: '>>> def pack(a,b,c,d):return hex((a << 18)+(b << 12)+( c << 6)+ d) >>> pack(1,26,59,62)' 確實。任何方式來簡化?所需的輸出實際上是: 'HEXADECIMAL:05AEFE2A3DCD' – eveo 2011-04-03 23:10:30

+0

它是Python。我將這些數字與64的冪相結合,然後使用Python的內置'十六進制'函數。 – 2011-04-04 00:19:34

+0

請你再解釋一下 – eveo 2011-04-04 01:15:58