16

Python 3.2.2 を使用しています。

'0b1010' や '1010' などのバイナリ文字列を 0b1010 などのバイナリ リテラル (文字列や 10 進整数リテラルではない) に変換する関数を探しています。

自作するのは簡単ですが、私は標準的な機能か、確立された機能を使用することを好みます。「車輪の再発明」はしたくありません。

とにかく、皆さんが持っているかもしれない効率的なアルゴリズムを喜んで見ていきます。

4

2 に答える 2

0

次のコードを試してください。

#!python3

def fn(s, base=10):
    prefix = s[0:2]
    if prefix == '0x':
        base = 16
    elif prefix == '0b':
        base = 2
    return bin(int(s, base))


print(fn('15'))
print(fn('0xF'))
print(fn('0b1111'))

あなたが持っていると確信していてs = "'0b010111'"、 だけを取得したい場合は010111、次のように真ん中をスライスすることができます:

s = s[2:-1]

つまり、インデックス 2 から最後の前のものまでです。

しかし、Ignacio と Antti が書いたように、数字は抽象的です。これは、数値 3 の別の文字列表現と0b11同じ方法で、数値 3 の文字列表現の 1 つです。3

repr()常に文字列を返します。結果に対してできる唯一のことreprは、アポストロフィを削除するreprことです。これは、アポストロフィを文字列表現に追加して、文字列表現であることを強調するためです。数値のバイナリ表現(アポストロフィなしの文字列として)が必要な場合bin()は、究極の答えです。

于 2013-08-22T08:53:05.050 に答える