1

私は次のような文字列を取得しました:

s = "\0x01\0x02\0x01\0x11"

そして、その文字列の平均数を取得したいと思います。私はこれを試しました:

sum = 0
for d in s:
    sum += int(d)

しかし、「基数10のint()の無効なリテラル:'\x08'」と書かれています:-(

4

4 に答える 4

3

structモジュールをお勧めします。

>>> import struct
>>> s = '\x01\x02\x01\x11'
>>> struct.unpack('=4B', s)
(1, 2, 1, 17)
于 2013-02-28T03:07:59.093 に答える
0

Pythonint()関数を使用できます。最初の引数は文字列で、2 番目の引数は基数です。

投稿したものが16進数のように見えるため、基数を確認する必要があります(0x0は通常16進数を示し、さらに02は有効な2進数ではありません)。

バイナリ (基数 2) の場合:

num = int("0x11", 2); # num will be 3

16 進数 (基数 16) の場合:

num = int("0x0A", 16); # num will be 10

文字列 ("\0x01\0x02\0x01\0x11") を変換するには:

numbers = [int(s, base) for s in "\\0x01\\0x02\\0x01\\0x11".split("\\") if len(s)]

で実行するとbase = 16、次のように出力されます。numbers = [1, 2, 1, 17]

次に、次を使用して平均を見つけることができます。

average = sum(numbers)/len(numbers)
于 2013-02-28T03:16:37.233 に答える
0

ord()will は、長さ 1 の文字列が与えられると、その文字列の文字のコード ポイントを示します。コードの代わりにこれを使用できるはずですint()。コードは次のようになります。

sum = 0
for d in s:
    sum += ord(d)
于 2013-02-28T03:34:19.017 に答える