1

どのビットが設定されているかを把握するために、Python の変数にビット マスクを適用したいと思います。いろいろ試してみたのですが、正しい方法がわかりません。私の変数はバイナリであり、その値を表示するには、関数 hexlify() を使用します。

    corr = fh.read(1)
    mac = fh.read(6)[-3:]
    print "corr "+ hexlify(corr)

いいえ、ビットマスクをcorrに適用するのに問題があります:

    print hexlify(corr&0x01)

それは言う

TypeError: unsupported operand type(s) for &: 'str' and 'int'

しかし、それはなぜですか?どんな助けでも大歓迎です!どうもありがとうございました!

4

3 に答える 3

1

corr は文字列であり、int を想定しているため

print hexlify(int(corr)&0x01) # if corr is like "12352"
print hexlify(ord(corr)&0x01) #if corr is like "\x##"

>>> ord("\x10")
16
>>> ord("\x10")&0x01
0
于 2012-10-30T17:46:14.697 に答える
0

今、私はこれが好きではありませんが、うまくいくようです:

print (int(hexlify(corr),16))&0x01

これはcorrを16進文字列に変換し、マスクが適用される前に再びbaclkを基数16の整数に変換します.....それ以外の場合は、これを解決する方法についてのヒントをいただければ幸いです。ありがとう!

于 2012-10-30T18:24:40.330 に答える
0

corr由来として

corr = fh.read(1)

1バイトを読み取ってから、このバイトの値を続けたいと思います。

次に、 と を使用する必要がord()ありchr()ます。

if corr: # it could as well be empty!
    print "corr "+ hexlify(chr(ord(corr) & 0x01))

ord()このバイトのバイト値を取得します。これを処理してhexlify()から、文字列であると思われるように、それをシングルバイト文字列に再変換します。

于 2012-10-30T19:04:12.453 に答える