2015-11-02 118 views
0

我使用Python從控制器中拖出三個8位寄存器。三個寄存器組合構成一個24位整數 - 因此第一個寄存器/字節是該字的位0-7,第二個寄存器/字節是位8-15,第三個寄存器/字節是位16-23。從數學角度來看,我認爲需要將三個寄存器/字節連接成一個24位二進制字,然後將二進制轉換爲十進制。但是 - 我需要嚴格保持字節格式,所以如果一個字節字中的前導零被移除 - 這是一個問題。有沒有辦法做到這一點?Python中的二進制數據轉換

+3

請提供一個例子輸入/輸出所需,你的企圖並指定你用什麼Python版本。閱讀[this](http://stackoverflow.com/help/mcve) – Pynchia

+0

例如,假設輸入Reg 3 = 123,(b'01111011),Reg 2 = 230,b'11100110'和Reg 1 = 15,b( 00001111)。輸出的24位字將是b'011110111110011000001111'= 8119823.例如,我嘗試過「bin()」,但是bin(15)只返回'(1111)',我需要打包4個0來保留完整的8位寬度。使用Python 2.7。 – DyTech

回答

0

像這樣的東西應該爲無符號數量的工作:

>>> b1, b2, b3 = 0x80, 0x40, 0x20 
>>> n = (b3 << 16) | (b2 << 8) | b1 
>>> n 
2113664 
>>> format(n, ',d') 
'2,113,664' 
>>> hex(n) 
'0x204080' 
>>> bin(n) 
'0b1000000100000010000000' 
+0

連接字節,我將如何將該二進制轉換回十進制? – DyTech

+0

在我的答案中,'n'是一個Python整數,它總是作爲二進制數據存儲在內部,但默認情況下,一個值通常會以十進制顯示或打印。我認爲添加對'hex()'和'bin()'函數的調用以在這些基礎中顯示結果會使得技術更加清晰 - 顯然我是錯誤的。查看更新的答案。 – martineau

+0

感謝您的澄清 - 對不起 - 我有點慢。試圖將我的Fortran知識轉化爲新的語言:-) – DyTech