DHT解析

xa = ConstBitStream(filename='xa1.dcm')
xa.find('0xFFC4', bytealigned=True)
dht_start = xa.pos  #DHTの開始位置を記憶しておく
xa.read('hex:8')    #1 byte進める
xa.read('hex:8')    #さらに1 byte進める
up16 = xa.read('hex:8')   #DHT sizeの上位1byte
down16 = xa.read('hex:8') #DHT sizeの下位1byte
size_dht = int(up16, 16)*16 + int(down16, 16) + 2
xa.pos = dht_start  #DHT start位置に戻しておく
    
for i in range(size_dht):
    print(xa.read('hex:8'), end=' ')
print()
    
xa.pos = dht_start + 5*8 # 5bytes進めて Huffbits[]にする
Huffbits = []
for i in range(16):
    Huffbits.append(xa.read('uint:8'))
    
print(Huffbits)

これで Huffbitsも出力するようになりました

ff c4 00 1e 00 00 03 01 01 01 01 01 01 01 01 00 00 00 00 00 00 00 04 05 03 06 02 01 07 0a 08 10 
[0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]

DHTの取り出し

ついに遅々とした歩みながらもここまできましたよ DHTを取り出すことに成功しました

xa = ConstBitStream(filename='xa1.dcm')
xa.find('0xFFC4', bytealigned=True)
dht_start = xa.pos  #DHTの開始位置を記憶しておく
xa.read('hex:8')    #1 byte進める
xa.read('hex:8')    #さらに1 byte進める
up16 = xa.read('hex:8')   #DHT sizeの上位1byte
down16 = xa.read('hex:8') #DHT sizeの下位1byte
size_dht = int(up16, 16)*16 + int(down16, 16) + 2
xa.pos = dht_start  #DHT start位置に戻しておく
    
for i in range(size_dht):
    print(xa.read('hex:8'), end=' ')

これにより下記の出力が得られ、DHTの読み込みに成功したことが確認されましたね

ff c4 00 1e 00 00 03 01 01 01 01 01 01 01 01 00 00 00 00 00 00 00 04 05 03 06 02 01 07 0a 08 10 

これで 16進数出力しています この例だと DHTのサイズは 0x1e = 16+14 = 30ということになりますね

あいかわらず格闘中

bitstream classの理解のために格闘中です ようやく指定のアドレスの内容を表す方法が分かりました

それはそうと、Ronさんから教えて頂いた Jupyter Notebook上で IDLEの代わりをさせています これまでも使ったことは何回もあったのですが、IDLEの代わりをさせることには頭が行きませんでした 感謝感謝です

xa.find('0xFFC4', bytealigned=True)
Out[19]:
(10352,)
In [20]:
xa.pos
Out[20]:
10352
In [21]:
xa.read('hex:8')
Out[21]:
'ff'

こんな具合に 指定のアドレスで 0xFFを読み出しました もちろんこれは DHTのトップですね

本日は CVIT関東甲信越地方会が東京で開催されています 僕なんかはもうロートルなので、参加する必要も認められていないのです 若い先生方が発表とか、役員会とかやらで皆いなくなりました その分僕は本日お留守番をして、久しぶりに冠動脈造影をしました また、ご紹介頂いた右冠動脈入口部の高度石灰化99%病変に対してのロータブレーターも自ら行いました 冠動脈造影は、両側橈骨動脈が゜度重なるカテのために pulselessとなっているため、右の尺骨動脈から行いました 指尖容積脈波により、血流が保持されていることを確認しながら止血しました それにしても理解が遅々として進まない

bitstring packageについて – 追記02

非常にややこしい話なのですが、bitstring classでのアドレス表記は、あくまでも bit addressなのです ですから、通常 binary editorや、我々がプログラム書く時に使用する hex addressいわゆるバイト・アドレスにするためには、ここでの表記を 8で割らねばならないのです もちろん 8というのは 1 byteの bit数ですね