簡體   English   中英

為什么在python中提取了錯誤的位?

[英]Why are wrong bits extracted in python?

我需要在位置 p 提取幾個 k 位才能轉換為十進制值。 我使用了一個標准函數,但是當我測試一個 6/7/8 字節長的二進制代碼時,它仍然不正確。 當我有一個 1 字節的代碼時,它是小端的,但是一旦我使用 8 字節的代碼,它就會被移位。 對於一個信號(7 字節代碼),它被移動了 +7 位,而另一個信號(另一個 ID,8 字節代碼)被移動了 -21 位。 我無法向自己解釋這一點,所以我想四處玩耍並手動添加或減去位,以便使用正確的位進行計算。 你知道為什么會這樣嗎?

示例 8 字節:

extract_k_bits('100001111000000001110111011001000111011111111000001110100111101',16,0)

輸出: 001110100111101而不是1000011110000000

extract_k_bits('100001111000000001110111011001000111011111111000001110100111101',16,24)

輸出: 0110010001110111而不是1011001000111011

這是我正在使用的代碼:

import openpyxl
from openpyxl import Workbook

theFile = openpyxl.load_workbook('Adapted_T013.xlsx')
allSheetNames = theFile.sheetnames 
print("All sheet names {} " .format(theFile.sheetnames)) 
sheet = theFile.active

def extract_k_bits(inputBIN,k,p):
        end = len(inputBIN) - p
        start = end - k + 1
        kBitSub = inputBIN[start : end+1]
        print(kBitSub)
        Dec_Values=int(kBitSub,2)

這是一個有效的解決方案:

def extract_k_bits(inputBIN,k): 
    # Since you always extract 16 bits
    # just use the point where you want to extract from
        kBitSub = inputBIN[k : k+16]
        print(kBitSub)

extract_k_bits('100001111000000001110111011001000111011111111000001110100111101',0)
extract_k_bits('100001111000000001110111011001000111011111111000001110100111101',23)

輸出

輸出圖像

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM