2016-04-16 10 views
0

プロセッサからバイト幅のデータを取り出し、ステータス用に1ビット/フラグを抽出しようとしています。私は0x1Bからデータバイトを引っ張ってから、0x08に対してマスクします。これは4番目のビットを残すことになっています。通常の操作では、ビットが反転するにはある程度の時間がかかります - ので、私は少し引っ張り、どんなに私は、Pythonは私がやろうとしています最後の行に主張している変数に何をすべきか、それをビット単位のANDと文字列の変数

STATUS_FOC = [] 
STATUS = [] 
FOC_Mask = [] 
while x <= 100: 
    STATUS = bin(sys.Read(0x1B)) 
    print 'status', STATUS 
    FOC_Mask = bin(0x08) 
    print 'FOC', FOC_Mask 

    STATUS_FOC = STATUS & FOC_Mask 

をテストしないで反復します2つの文字列の論理積です。次のようにSTATUSとFOC_Maskの出力は、次のとおりです。

状態0b11010000 FOC 0b1000私はバイナリとして読み込まれ、

それは上の「&」の操作を行うことができないと言って、最後の行の上にまだプログラムがクラッシュ文字列。ヘルプ

+1

まあ、はい。 'bin()'は文字列を返します。それを使用を停止します。 –

答えて

2

bin()関数は文字列を返します。あなたのコードでそれを必要としません。単純に:

STATUS_FOC = [] 
STATUS = [] 
FOC_Mask = [] 
# x = 0 
while x <= 100: 
    STATUS = sys.Read(0x1B) 
    print 'status', STATUS 
    FOC_Mask = 0x08 
    print 'FOC', FOC_Mask 
    STATUS_FOC = STATUS & FOC_Mask 
    # x += 1 

これは機能するはずです。システムを使用してテストする方法はありません。また、インクリメントするヒントを追加しましたxそうでなければ、Pythonはwhile条件にエラーを返します。そうでない限り、xが他の場所に定義されていればループは永遠に続きます。

0

binは、2進数の表記をしています。 &ビット演算子を使用するために、両方の値がはるかにints

In [10]: status = bin(0x1B) 

In [11]: print 'status', status 
status 0b11011 

In [12]: mask = bin(0x08) 

In [13]: print 'foc ', mask 
foc 0b1000 

In [14]: status_foc = int(status, 2) & int(mask, 2) 

In [15]: print 'status_foc', status_foc 
status_foc 8 

In [16]: status_foc = bin(status_foc) 

In [17]: print 'status_foc', status_foc 
status_foc 0b1000 

ことint('string', 2)の第2引数は、ベース2、またはバイナリなります。

関連する問題