0

ファイルからこのような16進値を読み取って、いくつかの操作を実行しようとしています。

REVA: XA0 DID0, DF= Q8B8, Rev: 0.0, UT: 0xd2d32103800600 : Cbos: 18 (0x0)

UT を読み取って、次の操作を実行しようとしています。

x=ut  & 0xFFFFFFFF
y=(ut>>32) & 0xFFFFFF

私のコードは以下です-

f=open('utinfo', 'rb')

for line in f:
    if line.startswith("REVA"):
        ut=line.split()[8] #grabs the value 0xd2d32103800600 
    x   = ut & 0xFFFFFFFF
    y   = (ut>>32) & 0xFFFFFF

私が得るエラーは-

     x  = ut & 0xFFFFFFFF
TypeError: unsupported operand type(s) for &: 'str' and 'long'

したがって、値を文字列として読み取っていますが、ファイルを rb として読み取ってもこの問題は発生しないと思いましたが、値を文字列として読み取っています。

ところで、これはPythonで動作します

>>?ut=0x2d32103800600
>>? x=ut & 0xFFFFFFFF
>>?x
0x3800600L
>>? y= ut>>32 & 0xFFFFFF
>>?y
>>?0x0L

これを修正するにはどうすればよいですか? お時間とご協力ありがとうございます。

4

1 に答える 1

1

更新:基数 16 を長い変換に追加しました!

&さまざまなデータ型に対して操作を実行しています。それを行う前に、次のように読み取りstringlongデータ型に変換する必要があります。

# at this moment ut data type is string
ut=line.split()[8] #grabs the value 0xd2d32103800600
# convert string to long data type, set base 16
ut = long(ut, 16)

その後、引き続きコードを実行できます。

x   = ut & 0xFFFFFFFF
y   = (ut>>32) & 0xFFFFFF

完全なコード:

f=open('utinfo', 'rb')
for line in f:
    if line.startswith("REVA"):
        ut=line.split()[8] #grabs the value 0xd2d32103800600 
        ut=long(ut,16)
    x   = ut & 0xFFFFFFFF
    y   = (ut>>32) & 0xFFFFFF

お役に立てれば!

于 2013-05-29T14:37:23.660 に答える