0

PDU でエンコードされた SMS からの GSM 日付/タイム スタンプを持っています。

\x90、\x21、\x51、\x91、\x40、\x33

フォーマット yy,mm,dd,hh,mm,ss

それらをバイナリファイルからバイト配列に読み込みました。それらを文字列に変換したいのですが、デコードを行わずに、902151914033 を含む文字列になりたいと思います。次に、文字列内の各 2 文字を逆にする必要があります。

誰かが私にいくつかの指針を与えることができますか? どうもありがとう

4

5 に答える 5

5

これで始められるはずです:

>>> s = b'\x90\x21\x51\x91\x40\x33'
>>> lst = [hex(z)[2:] for z in s]
>>> lst
['90', '21', '51', '91', '40', '33']

>>> string = ''.join(hex(z)[3:1:-1] for z in s)
>>> string
'091215190433'
于 2009-12-16T19:16:21.963 に答える
5

16 進数に変換するには:

hexdata = ''.join('%02x' % ord(byte) for byte in bindata)

他のすべての16進文字を逆にするには(私が正しく理解している場合):

hexdata = ''.join(('%02x' % ord(byte))[::-1] for byte in bindata)

于 2009-12-16T19:33:04.473 に答える
1

あなたが意味するのは、あなたが何らかの処理をたいということです!未処理のバイトは、最も簡単に文字として表されます。

私はあなたが望むものは次のようなものだと思います:

r = ''
for num in array:
    r += '%2X' % num
return r

必要に応じて、匿名関数にまとめることができると確信しています。

于 2009-12-16T19:15:22.043 に答える
0
switcher= dict(
    (n1*16 + n2, n2*16 + n1)
    for n1 in range(16)
    for n2 in range(16)
)

def nibble_switcher(bindata):
    return type(bindata)(switcher[i] for i in bindata)
    # will work with many types, not only bytearray

def nibble_switcher_as_hex_string(bindata):
    return ''.join("%02x" % i for i in nibble_switcher(bindata))
于 2009-12-28T21:58:51.660 に答える
0

あなたの質問で、あなたが提供した文字列が \ と を含むバイトのリテラル セット (ascii として) であり、それらを取り除きたい場合は、binascii モジュールと str.replace を使用できます。

import binascii
qp = binascii.b2a_qp( bunchabytes )
plainstring = qp.replace( '\\x', '' ).replace( ',', '' )

結果のプレーンストリングは、数字のみで構成されます。

于 2009-12-16T20:37:32.597 に答える