配列の初期化におけるPythonの奇妙な動作

アブラハム

以下に、APDUコマンドをスマートカードに送信するために作成したPythonプログラムのスニペットを示します。このプログラムではPySCardライブラリを使用しました。

最初のプログラム:

for LOAD_KEY in validLoadCommands:
    data,sw1,sw2 =connection.transmit(LOAD_KEY)
    temp = LOAD_KEY
    x= temp[3]
    for j in range(0,len(LOAD_KEY)):
        LOAD_KEY[j]=hex(LOAD_KEY[j])
    print '   >>>',' Load Command :',
    for j in range(0,len(LOAD_KEY)):
        LOAD_KEY[j]=str(LOAD_KEY[j])
        if len(LOAD_KEY[j])==3:
            LOAD_KEY[j]=LOAD_KEY[j][0:2]+'0'+LOAD_KEY[j][2]
        print LOAD_KEY[j],
    print
    for j in range(0,len(data)):
        data[j]=hex(data[j])
    print '   <<<',' Data :',
    for j in range(0,len(data)):
        data[j]=str(data[j])
        if len(data[j])==3:
            data[j]=data[j][0:2]+'0'+data[j][2]
        print data[j],
    print '--',hex(sw1),hex(sw2)

    if (temp[2] == 0x00 or temp[2] == 0x20):
        keyType = 0x60
    else:
        keyType = 0x61

    AUTH = [0xFF, 0x86, 0x00, 0x00, 0x05, 0x01, 0x00, blockNum, keyType,temp[3]]
    print 'AUTH Command: ', AUTH
    data,sw1,sw2 =connection.transmit(AUTH)
    print data, sw1, sw2

そしてその出力:

Auth Command: [255, 134, 0, 0, 5, 1, 0, 4, 97, '0x0e']

Traceback (most recent call last):
  File "C:\Users\Erb4h1m\Desktop\Faraadis Alborz Card Reader\CRT-603-CZ1_Read1Block.py", line 199, in <module>
    data,sw1,sw2 =connection.transmit(AUTH)
  File "D:\Software\Python27\lib\site-packages\smartcard\CardConnectionDecorator.py", line 82, in transmit
    return self.component.transmit(bytes, protocol)
  File "D:\Software\Python27\lib\site-packages\smartcard\CardConnection.py", line 140, in transmit
    data, sw1, sw2 = self.doTransmit(bytes, protocol)
  File "D:\Software\Python27\lib\site-packages\smartcard\pcsc\PCSCCardConnection.py", line 173, in doTransmit
    hresult, response = SCardTransmit(self.hcard, pcscprotocolheader, bytes)
  File "D:\Software\Python27\lib\site-packages\smartcard\scard\scard.py", line 1329, in SCardTransmit
    return _scard.SCardTransmit(*args)
TypeError: Expected a list of bytes.

そして、私は交換するときtemp[3]x

for LOAD_KEY in validLoadCommands:
    data,sw1,sw2 =connection.transmit(LOAD_KEY)
    temp = LOAD_KEY
    x= temp[3]
    for j in range(0,len(LOAD_KEY)):
        LOAD_KEY[j]=hex(LOAD_KEY[j])
    print '   >>>',' Load Command :',
    for j in range(0,len(LOAD_KEY)):
        LOAD_KEY[j]=str(LOAD_KEY[j])
        if len(LOAD_KEY[j])==3:
            LOAD_KEY[j]=LOAD_KEY[j][0:2]+'0'+LOAD_KEY[j][2]
        print LOAD_KEY[j],
    print
    for j in range(0,len(data)):
        data[j]=hex(data[j])
    print '   <<<',' Data :',
    for j in range(0,len(data)):
        data[j]=str(data[j])
        if len(data[j])==3:
            data[j]=data[j][0:2]+'0'+data[j][2]
        print data[j],
    print '--',hex(sw1),hex(sw2)

    if (temp[2] == 0x00 or temp[2] == 0x20):
        keyType = 0x60
    else:
        keyType = 0x61

    AUTH = [0xFF, 0x86, 0x00, 0x00, 0x05, 0x01, 0x00, blockNum, keyType, x]
    print 'AUTH Command: ', AUTH
    data,sw1,sw2 =connection.transmit(AUTH)
    print data, sw1, sw2

次に、出力は次のとおりです。

AUTH: [255, 134, 0, 0, 5, 1, 0, 4, 97, 14]
[] 144 0

上記のように、2番目のケースでは、最初のプログラムと2番目のプログラムに違いはありませんが、エラーは発生しません。交換しただけです

    AUTH = [0xFF, 0x86, 0x00, 0x00, 0x05, 0x01, 0x00, blockNum, keyType,temp[3]]

と:

    AUTH = [0xFF, 0x86, 0x00, 0x00, 0x05, 0x01, 0x00, blockNum, keyType,x]

そして、xで初期化されたtemp[3]プログラムの先頭に。初期化の行とエラーの行の間で変更xtemp[3]変更もされませんでした。

ここで何が起こっているのですか?

シルビル

あなたのtemp変数の参照LOAD_KEY(3行目:temp = LOAD_KEY

ときにx= temp[3]呼び出される、それはの価値だLOAD_KEYあなたの後のインデックスで3右connection.transmitのセットです。

あなたがtemp[3]あなたのために送っているときAUTHLOAD_KEYが変わったので、そうしtemp[3]ます。したがって、それはもはやと同じ値ではありませんx

connection.transmit => LOAD_KEY is set => temp => [3] => x
*** LOAD_KEY changes ***
x => old value of temp[3] aka LOAD_KEY[3]
temp[3] => whatever your code have put in it

編集:短い例

>>> LOAD_KEY = ['one', 'two', 'three', 'four']
>>> temp = LOAD_KEY
>>> x = temp[3]
>>> LOAD_KEY[3] = 'new value'
>>>
>>> LOAD_KEY[3]
'new value'
>>> temp[3]
'new value'
>>> x
'four'

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

構造体の配列を初期化する奇妙な動作

分類Dev

文字列データの派手な配列を初期化する奇妙な動作

分類Dev

Pythonのダイヤモンド継承におけるsuper()の奇妙な動作

分類Dev

PHPUnitのインストールにおける奇妙な動作

分類Dev

初期化されていない配列と設定されていない配列の奇妙な動作

分類Dev

奇妙なjQueryDataTablesの初期化動作

分類Dev

swift の配列初期化における () と [] の違い

分類Dev

配列の初期化における三項演算子

分類Dev

Dateオブジェクトのシリアル化における奇妙な動作

分類Dev

gfortranでの暗黙のdoを使用した配列コンストラクターの奇妙な初期化動作

分類Dev

Joda-Time:期間計算におけるうるう年の奇妙な動作

分類Dev

配列で最大数を見つけるときの奇妙な動作

分類Dev

ファイルへの書き込みにおける奇妙な動作

分類Dev

Javaの奇妙な配列の動作

分類Dev

C ++の奇妙な配列の動作

分類Dev

Twitter Bootstrap Collapse ..奇妙な配列の初期化?

分類Dev

奇妙な配列の初期化式?

分類Dev

JavaScript配列の奇妙な初期化

分類Dev

配列初期化の奇妙な値

分類Dev

numpy配列にインデックスを付けるタプルの奇妙な動作

分類Dev

オブジェクトの初期化後にC ++でchar配列を表示する際の異常な動作

分類Dev

PHP連想配列の奇妙な動作

分類Dev

Matlab配列での奇妙な動作

分類Dev

C配列での奇妙な動作

分類Dev

配列文字列要素に対するPowerShellマッチングの奇妙な動作

分類Dev

Kotlin配列の初期化におけるinit呼び出しの順序

分類Dev

配列の割り当てにおけるコンパイラの動作

分類Dev

char配列を単一のcharに割り当てるという奇妙な動作

分類Dev

Pythonでのクラスのインスタンス化における異なる動作

Related 関連記事

  1. 1

    構造体の配列を初期化する奇妙な動作

  2. 2

    文字列データの派手な配列を初期化する奇妙な動作

  3. 3

    Pythonのダイヤモンド継承におけるsuper()の奇妙な動作

  4. 4

    PHPUnitのインストールにおける奇妙な動作

  5. 5

    初期化されていない配列と設定されていない配列の奇妙な動作

  6. 6

    奇妙なjQueryDataTablesの初期化動作

  7. 7

    swift の配列初期化における () と [] の違い

  8. 8

    配列の初期化における三項演算子

  9. 9

    Dateオブジェクトのシリアル化における奇妙な動作

  10. 10

    gfortranでの暗黙のdoを使用した配列コンストラクターの奇妙な初期化動作

  11. 11

    Joda-Time:期間計算におけるうるう年の奇妙な動作

  12. 12

    配列で最大数を見つけるときの奇妙な動作

  13. 13

    ファイルへの書き込みにおける奇妙な動作

  14. 14

    Javaの奇妙な配列の動作

  15. 15

    C ++の奇妙な配列の動作

  16. 16

    Twitter Bootstrap Collapse ..奇妙な配列の初期化?

  17. 17

    奇妙な配列の初期化式?

  18. 18

    JavaScript配列の奇妙な初期化

  19. 19

    配列初期化の奇妙な値

  20. 20

    numpy配列にインデックスを付けるタプルの奇妙な動作

  21. 21

    オブジェクトの初期化後にC ++でchar配列を表示する際の異常な動作

  22. 22

    PHP連想配列の奇妙な動作

  23. 23

    Matlab配列での奇妙な動作

  24. 24

    C配列での奇妙な動作

  25. 25

    配列文字列要素に対するPowerShellマッチングの奇妙な動作

  26. 26

    Kotlin配列の初期化におけるinit呼び出しの順序

  27. 27

    配列の割り当てにおけるコンパイラの動作

  28. 28

    char配列を単一のcharに割り当てるという奇妙な動作

  29. 29

    Pythonでのクラスのインスタンス化における異なる動作

ホットタグ

アーカイブ