【问题标题】:How to convert int to signed char?如何将int转换为带符号的char?
【发布时间】:2014-11-30 07:47:08
【问题描述】:

假设我有整数 x (-128

我确实喜欢这个。但我做不到。

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

【问题讨论】:

  • Python 没有带符号的字符类型...你打算用它做什么?
  • @mgilson 我想将 int 保存为带符号字符的类型。这样我就可以从 C 中读取它。
  • 我不确定“从 C 中读取”是什么意思,但您可以这样做:import ctypes;x=ctypes.c_int32(-1)

标签: python


【解决方案1】:

在 Python 中,signedunsignedcharintlong 等之间实际上没有任何边界。但是,如果您的目标是序列化数据以使用 C模块、函数或其他任何东西,您可以使用struct module 来打包和解包数据。例如,b 将数据打包为 signed char 类型。

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

如果您直接与 C 函数对话,use ctypes types 正如 Ashwin 所建议的那样;当你传递它们时,Python 会根据需要翻译它们并将它们堆积在堆栈上。

【讨论】:

  • 这正是我想要的。谢谢。
【解决方案2】:

它不起作用,因为x 不在 0 和 256 之间。

chr 必须指定一个介于 0 和 256 之间的 int

【讨论】:

【解决方案3】:

在 Python 3 中,chr() 不会将 int 转换为带符号的 char(Python 无论如何都没有)。 chr() 返回具有输入 int 的序数值的 Unicode 字符串。

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

输入可以是任何支持的基数,而不仅仅是十进制数:

>>> chr(0xBAFF)
'뫿'

注意:在 Python 2 中,int 必须介于 0 和 255 之间,并且会输出一个标准(非 Unicode)字符串。 Py2 中的unichr() 的行为如上。

【讨论】:

  • 有点奇怪,如果这两个是一回事,没有from six.moves import chr
  • @Ashwini 正确。我认为大部分时间都在 Py3 中 :) 我更新了我的答案以解决它在 both 版本中的功能
猜你喜欢
  • 2015-04-29
  • 2017-03-21
  • 2013-05-03
  • 2011-04-09
  • 2018-05-15
  • 2012-06-02
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多