2011-08-27 54 views
0

我正在使用chrint將二進制表示字符串轉換爲實數二進制值。當n超過256時,chr(n)失敗

我所做的是

n=int('0101011',2) 
    binary=chr(n) 

然後binary是表示字符串的實際二進制值。

但是如果我給int的字符串在十進制中大於256會怎樣?

任何解決方案?

PS: 我用CHR是我想n轉換爲字符串,這樣我可以用它f.write()寫入文件,究其原因。

而這個問題是從this question

回答

7

chr()起源被定義爲ASCII字符,必須小於256中值操作。如果您期待Unicode字符,則可以使用unichr()代替。

+1

如果該值大於256,將返回mod 256。 – dayuloli

0

如果我理解你的問題,你想將二進制字符串轉換爲整數值。這就是你在第一行代碼中所做的。第二行只是將一個整數值轉換爲ASCII表中由該值表示的字符。因此,例如,如果字符串是01100001,那麼在第一步中將轉換爲97的int值。第二步然後將97轉換爲ASCII字符'a'。如果您嘗試將此變量作爲數字使用,它將被轉換回爲97的值。因此,如果我理解了您的問題,則在步驟1之後實際上已經有了您想要的數字。

+1

我不認爲這就是他的目標。他想採用'01000001',轉換爲'65',然後將其轉換爲'a',並將其寫入文件。 – dlev

+0

@Anulith,是的,dlev是對的。最終目標是將其寫入文件。所以我的路線圖是** 1 **,將字符串轉換爲int,** 2 **,int轉換爲字符串,以便將其寫入文件,** 3 **,寫入文件 – xiaohan2012

1

您可以使用不同的格式字符在struct模塊中的pack()方法中給出的格式字符串可以輕鬆地獲得長度爲1到8個字節的帶符號或無符號整數的相應二進制表示字符串。

>>> from struct import pack 
>>> pack('B', 255) 
'\xff' 
>>> pack('H', 257) 
'\x01\x01' 
>>> pack('Q', 9223372036854775807) 
'\xff\xff\xff\xff\xff\xff\xff\x7f' 

如果需要,可以使用f.write()將返回的值寫入文件。當讀取或寫入二進制數據到文件時,當您的文件爲open()時,應該在參數值mode後附加'b'。

0

當試圖轉換unicode值時,可能會遇到許多問題。因此,使用unichr並不總是可能要麼,例如:

>>> n = int('0001f600', 16) 
>>> unichr(n) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: unichr() arg not in range(0x10000) (narrow Python build) 

請注意,在錯誤narrow Python build消息,這意味着Python中建沒有廣泛支持Unicode字符,但即使是狹窄的Python可以繞過這個限制(無需與--enable-unicode=ucs4標誌重新編譯):

>>> n = int('0001f600', 16) 
>>> s = '\\U{:0>8X}'.format(n) 
>>> s 
'\\U0001F600' 
>>> binary = s.decode('unicode-escape') 
>>> print(binary)