Closed4

bcdでの長さの扱いの理解メモ

miyatakamiyataka

こちらの記事における、固定長のデータエレメント(処理コード、取引金額、有効期限)がwikiにある長さの半分になっていることを不思議に思っていて、それがやっと納得できたので書いておく

https://tech.kanmu.co.jp/entry/2022/05/17/113000

miyatakamiyataka

BCDの理解を確認しておく必要がある
BCDは2進数で10進数を一目でわかるようにするための表現方法
基本的には2進数と10進数は計算をすれば対応関係がわかるのだが、それが面倒だから省ける方法ないか?という経緯で考え出されたものっぽい。

バイナリを人間が眺めるとき、よく利用されるのが1バイト(8bit)を16進数2桁(4bitが2つ)で表示し、並べた形式(下記の画像参照)

そして、上記の方法で並べたときに見えている数値をそのまま10進数として解釈しよう!というもの

miyatakamiyataka

ここで冒頭の疑問に戻る。なぜ長さが半分になるのか?
これはBCDが見えたままのものを解釈する
一方、プログラム中ではバイト列として扱っており、ここでの長さ1は当然1byteである
BCDとして解釈するとき、見えているのは1byteを2桁の16進数で表示したモノである
つまり、1byteがBCDにおける2桁に対応する。
そのため、例えばBCDとして10桁読み出したい場合、バイト列としては長さ5だけ読み出せばよいのである

このスクラップは2022/06/04にクローズされました