2014-10-06 264 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