簡體   English   中英

Python中按位異或的不受支持的操作數類型

[英]Unsupported operand types for bitwise exclusive OR in Python

我正在使用一個生成循環冗余校驗值的函數。 在通過串行發送數據包之前,我似乎遇到了一些問題,因為Python無法確定值的十六進制表示形式和ascii表示形式之間的差異。 我發送以下數據:

('+', ' ', 'N', '\x00', '\x08')

到以下功能

# Computes CRC checksum using CRC-32 polynomial 
def crc_stm32(self,data):
    crc = 0xFFFFFFFF
    for d in data:
        crc ^= d
        for i in range(32):
            if crc & 0x80000000:
                crc = (crc << 1) ^ 0x04C11DB7 #Polynomial used in STM32
            else:
                crc = (crc << 1)
    crc = (crc & 0xFFFFFFFF)
    return crc

現在,通過該函數的'+'char的實際值是(可能有人期望的)0x2B,但是當Python到達該行時

crc ^= d

我面臨以下錯誤

^ =不支持的操作數類型:'long'和'str'

我試圖將值強制轉換為chr(),hex(),int(),long()等,但均無濟於事。 似乎Python正在將'+'值解釋為字符或字符串。

根據juanpa的評論,對代碼的以下修改允許正確處理數據。

    # Computes CRC checksum using CRC-32 polynomial 
def crc_stm32(self,data):
    crc = 0xFFFFFFFF
    for d in map(ord,data):
        crc ^= d
        for i in range(32):
            if crc & 0x80000000:
                crc = (crc << 1) ^ 0x04C11DB7 #Polynomial used in STM32
            else:
                crc = (crc << 1)
    crc = (crc & 0xFFFFFFFF)
    print crc
    return crc

暫無
暫無

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

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