2013-03-11 152 views
0

我想轉換一個字符列表(以單個字節表示,即範圍[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

回答

5

我發現我能做到這一點的轉換與「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

0

我想知道「字符列表」是什麼意思,它們是數字嗎?如果是這樣,我認爲x % 256 - 128x % -256 + 128應該工作。

2

不知道我是否理解了這個問題......你想要做那樣的事情嗎?

[i - 255 if i > 127 else i for i in [ord(l) for l in "azertyuiopqsdféhjklm3{"]] 
1
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)