これは「PARS [INGの]ニブル」としての資格またはあなたのために十分な「神託」である場合、私は知りませんが、これは動作するようです:テストデータについては
import itertools
def convert_packed_decimal(byte_stream):
digit_list = list(itertools.chain.from_iterable([[(b & 0xF0) >> 4, b & 0xF] for b in byte_stream]))
num_digits = digit_list.index(0xE)
return sum([digit_list[i] * 10 ** (num_digits - i - 1) for i in range(num_digits)])
if __name__ == '__main__':
print(convert_packed_decimal(b'\x12\x34\xe0'))
print(convert_packed_decimal(b'\x90\x21\x0e'))
をb'\x12\x34\xe0'
、関数の最初の行はリスト内包をeネストされたリスト内の個々の数字
[[1,2],[3,4],[14,0]]
、その後list(itertools.chain.from_iterable(...
は、単純なリストにそれを平らにxtract。
[1,2,3,4,14,0]
2行目は、(この場合、4)私たちプロセスの桁数を与え、0xE
(小数14)ターミネーターのインデックスを見つけます。
三行目は
[1 * 1000, 2 * 100, 3 * 10, 4 * 1]
、リスト中のその位置に対応する10の力を掛け、各桁を処理するリスト内包を使用し、次いでsum(...
、それらを加算します。
したがって、1234は '\ x12 \ x34'、12345は' \ x12 \ x34 \ x5e'になりますか? –
はい。 1234は\ x12 \ x34 \ xe0となります。 ところで、私はニブルを解析するコードを書いたが、私は何かpyononicしたい。 – ZevGriner