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

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

问题描述:

我想转换一个字符列表(以单个字节表示,即范围[0,255]),用[-128,127]范围内的整数表示。我读过Python的模运算符(%)总是返回一个与分母符号相同的数字。如何在Python中将字符映射到整数范围[-128,127]?

在Python中做这种转换的正确方法是什么?

EDIT 字符映射到[128255]与ord应该被重新映射到[-128,-1],以128映射到在-128和255映射到-1。 (对于转换的反面,我使用chr(my_int%256),但my_int可以是负数。)

+2

我想我们需要更多的信息了解你想要做什么。什么是你的输入字符集?总共有256个字符?他们有连续的序号? – sberry 2013-03-11 08:59:32

+0

@sberry我编辑了我的问题,以更好地反映我的意思。 – n611x007 2013-03-11 09:09:34

+0

何时输出数字是正数? – christophe31 2013-03-11 09:12:38

我发现我能做到这一点的转换与“unpackbyte荷兰国际集团”与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 
+1

嗯,非常好的解决方案,签署字符的胜利。 – sberry 2013-03-11 09:20:43

+0

你应该接受你自己的答案,因为这是IMO的最佳解决方案。 – sberry 2013-03-11 09:22:43

+0

@sberry谢谢;我想等,但后来我想我会这样做,但是因此,我要求我等两天才能接受我自己的答案。 – n611x007 2013-03-11 09:33:49

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

不知道我是否理解了这个问题......你想要做那样的事情吗?

[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)