2012-11-01 20 views
0

我有兩個char 8位值,我需要合併構建一個短的16位值。如何在Python中使用位移建立一個短的char(s)?

在C++中,我會做這樣的:

unsigned char lower = <someValue>; 
unsigned char upper = <anotherValue>; 
unsigned short combined = lower + (upper << 8); 

我怎樣才能在Python V2.6.2也這樣做?

看來這也只是在Python一樣的,但我想,以確保不存在一些細微的差別:

lower = <someValue> 
upper = <anotherValue> 
combined = lower + (upper << 8) 
+3

我很確定它應該工作相同。 – mgilson

+0

我總是這樣做,從來沒有問題。唯一要記住的是,python的整數不是固定長度的,所以一些「技巧」可能無法按預期工作。 – Bakuriu

+0

它的工作原理是一樣的,但最終結果並不是簡短的,而是一個Python整數。例如如果'upper'值實際上大於255,那麼最終的結果實際上並不適合16位,Python不會抱怨。您可能想要確認添加'&0xffff'。 – Keith

回答

1

它可能會略有矯枉過正,但如果你想成爲真正確定爲了避免任何隱藏的區別,我勸回退到下使用 ctypes

lower = ctypes.cschar(<somevalue>) 
upper = ctypes.cschar(<anothervalue>) 
combined = ctypes.csshort(lower + (upper << 8)) 

這樣做,你必須具有硬輸入您的變量,這將使調試在未來更容易的優點。

注:我不太確定< <運營商仍然與ctypes(沒有理由不)。