如何在Python中将字符映射到整数范围[-128,127]?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Python中将字符映射到整数范围[-128,127]?相关的知识,希望对你有一定的参考价值。

我想转换一个字符列表(用单个字节表示,即范围[0,255]),用[-128,127]范围内的整数表示。我已经读过Python的模运算符(%)总是返回一个与分母具有相同符号的数字。

在Python中进行此转换的正确方法是什么?

编辑使用ord映射到[128,255]的字符应重新映射到[-128,-1],128映射到-128,255映射到-1。 (对于转换的逆转,我使用chr(my_int%256),但my_int可以是负数。)

答案

我发现我可以使用unpack模块使用“byteing from struct”进行此转换:

# gotcha|pitfall: my original idea, but this generates a list of 1-tuples:
# x = [struct.unpack("b",a) for a in charlist]

fmt = "%ib"%len(charlist) # eg. "5b", if charlist's length is 5
x = struct.unpack(fmt,charlist) # tuple of ints
另一答案

不确定我是否明白这个问题......你想做那样的事吗?

[i - 255 if i > 127 else i for i in [ord(l) for l in "azertyuiopqsdféhjklm3{"]]
另一答案
def to_ints(input):
    return [o if o <= 128 else 255 - o for o in [ord(char) in input]]

def to_str(input):
    return "".join([chr(i%256) for i in input])

out = to_ints("This is a test")
print to_str(out)
另一答案

我想知道“一个字符列表”是什么意思,它们是数字吗?如果是这样,我认为x % 256 - 128x % -256 + 128应该工作。

另一答案

这是一个老问题,但对于未来的读者来说,单个整数的直接解决方案是(x + 128)%256 - 128。如果处理字符数据,用x替换ord(c)

%算子的结果与x + 128是一致的(mod 256);并从中减去128使得最终结果与x一致并将范围移至[128,127]。

这将在生成器表达式中工作,并在Python 3中保存一个步骤,您需要将字符串转换为bytes对象。

以上是关于如何在Python中将字符映射到整数范围[-128,127]?的主要内容,如果未能解决你的问题,请参考以下文章

对于每个整数,它映射到啥字符?

如何在 JPA Hibernate 映射中将 GUID(不是 PK)添加到已经具有 PK(整数)的现有实体

将数字重新映射到pygame中的另一个范围[重复]

在python中将整数列表转换为范围

如何在 Python 中将字符串转换为十六进制整数?

基本数据类型-位运算-字符集-流