2011-03-14 80 views
5

可以說我有一些二進制值:Python:如何從二進制轉換爲基本64並返回?

0b100 

,並希望將其轉換爲Base64

base64.b64decode(0b100)告訴我,這是期待一個字符串,而不是一個int ....現在,我不不想使用字符串。

那麼,誰能指出我在正確的方向轉換二進制數到base64數字?謝謝!

= d

+1

你真的要轉換爲基數64 *號*,或基於64位編碼?轉換爲基數爲64的數字是一個微不足道的數學計算(以任何語言)。 – 2011-03-14 22:40:12

+1

只是想知道如果python有超級簡單易用的東西。 – NullVoxPopuli 2011-03-14 22:52:37

回答

4

取決於你如何代表的價值0b100

>>> import struct 
>>> val = 0b100 
>>> print struct.pack('I', val).encode('base64') 
BAAAAA== 

這會變成你的價值到本地字節序的4字節的整數,並將該值編碼爲BASE64。您需要指定數據的寬度,因爲base64實際上是用可打印字符表示二進制數據。

您通常可以通過struct的函數將數據編碼爲一串字節,然後編碼爲base64。確保在解碼時使用相同的數據佈局和字節順序。

+0

這可能不是提問者所追求的內容。這將把二進制轉換爲十進制,然後對64進行十進制表示編碼。如果你只是想將數字轉換爲64位數,那就有點不同了。 – 2011-03-14 22:40:07

+0

嗯?正如他所問,我是base64編碼的二進制表示形式。 (我最初通過誤讀他的問題而錯誤地回答了這個問題,但是從那以後就修正了) – yan 2011-03-14 22:41:25

+0

那麼你怎麼回去? – NullVoxPopuli 2011-03-14 22:48:48

0

你的二進制值有多大?如果它可以放在一個字節中,那麼你可以使用chr

>>> base64.b64encode(chr(255)) 
'/w==' 

否則,我認爲你必須得到單個字節出來的一些指數的數學和大端或小端排列它們,呼籲chr多次。 (編輯:顏的與struct模塊答案是容易:)

另外,我要指出的是,二進制整數語法就是這樣,語法。解釋者將其視爲另一個整數。

>>> (0b0).__class__ 
<type 'int'> 
+0

好吧,它可以是從8位到512位的任何地方。 = \ – NullVoxPopuli 2011-03-14 23:09:26

1

二進制文字只是普通的Python整數。

>>> 0b100 
<<< 4 

>>> 4 
<<< 4 

只是轉換爲字符串和Base64編碼,它(給你一個字符串,它是「4」的Base64表示)。這種方法沒有問題,它是無損和簡單的。

>>> s = str(0b100).encode('base64') 

>>> int(s.decode('base64')) 
<<< 4 

如果你願意,你可以使用斌爲int轉換成二進制字符串:

>>> bin(int(s.decode('base64'))) 
<<< '0b100' 
相關問題