2014-10-06 193 views
1

比方說,我有整數x(-128 < = x < = 127)。如何將x轉換爲signed char?如何將int轉換爲signed char?

我這樣做。但我不能。

>>> x = -1 
>>> chr(x) 
ValueError: chr() arg not in range(256) 
+6

Python沒有簽名字符類型......您打算如何處理它? – mgilson 2014-10-06 03:30:59

+0

@mgilson我想將int保存爲signed char類型。所以我可以從C讀取它。 – 2014-10-06 03:33:37

+0

我不確定你的意思是「從C讀取」,但你可以這樣做:'import ctypes; x = ctypes.c_int32(-1)' – 2014-10-06 03:36:49

回答

2

在Python中,有沒有真正之間signedunsignedcharintlong等。但是,如果你的目標是序列化數據與C模塊,功能使用,或什麼的,你可以在任何邊界使用struct module打包和解包數據。例如,b將數據打包爲signed char類型。

>>> import struct 
>>> struct.pack('bbb', 1, -2, 4) 
b'\x01\xfe\x04' 

如果你直接跟一個C函數,use ctypes types作爲阿什溫建議;當你通過它們時,Python會根據需要翻譯它們並將它們堆疊在堆棧上。

+0

中的功能。這正是我想要的。謝謝。 – 2014-10-06 03:51:00

1

它不工作,因爲x不是256介於0和

chr必須有一個int介於0和256

+3

@MattDMo從https: //docs.python.org/2/library/functions.html#chr:'參數必須在[0..255]範圍內。 – 2014-10-06 03:35:40

+2

@MattDMo在OP中的錯誤意味着他是**不**使用Py3。 – 2014-10-06 03:37:11

1

在Python 3,chr()不轉換爲int變成一個有符號的字符(Python沒有)。 chr()返回一個具有輸入int的序數值的Unicode字符串。

>>> chr(77) 
'M' 
>>> chr(690) 
'ʲ' 

的輸入可以是一個數字在任何支持的基礎上,不只是小數:

>>> chr(0xBAFF) 
'뫿' 

注:在Python 2,整型必須在0和255,以及將輸出一個標準之間(非Unicode)字符串。 Py2中的unichr()的行爲如上。

+0

在'unichr()'的Python 2中。 – 2014-10-06 03:33:48

+0

有點奇怪的是,如果這兩者是相同的,那麼就沒有'from six.moves import chr'。 – 2014-10-06 03:41:13

+0

@ Ashwini正確。我認爲在Py3大多數時間:)我更新了我的答案,以解決** **版本 – MattDMo 2014-10-06 03:41:23