web-dev-qa-db-ja.com

タイプキャストPython

Pythonの文字列を、符号なしおよび符号付き8、16、32、64ビットのint、double、float、stringなどの他のタイプに変換する必要があります。

これどうやってするの?

21
user46646

int関数を使用して、文字列を32ビット符号付き整数に変換できます。

str = "1234"
i = int(str)  // i is a 32-bit integer

文字列が整数を表さない場合、ValueError例外が発生します。ただし、文字列が整数を表しているが、その整数が32ビット符号付きintに収まらない場合は、代わりにlong型のオブジェクトを取得することに注意してください。

その後、いくつかの簡単な数学を使用して、他の幅と符号付きに変換できます。

s8 = (i + 2**7) % 2**8 - 2**7      // convert to signed 8-bit
u8 = i % 2**8                      // convert to unsigned 8-bit
s16 = (i + 2**15) % 2**16 - 2**15  // convert to signed 16-bit
u16 = i % 2**16                    // convert to unsigned 16-bit
s32 = (i + 2**31) % 2**32 - 2**31  // convert to signed 32-bit
u32 = i % 2**32                    // convert to unsigned 32-bit
s64 = (i + 2**63) % 2**64 - 2**63  // convert to signed 64-bit
u64 = i % 2**64                    // convert to unsigned 64-bit

float関数を使用して、文字列を浮動小数点に変換できます。

f = float("3.14159")

Pythonフロートは、他の言語がdoubleと呼ぶもの、つまり64ビットです。 Pythonには32ビットの浮動小数点はありません。

40
Adam Rosenfield

以下のタイプは、ほとんどの場合、Pythonには存在しません。Pythonでは、文字列はint、long、またはfloatに変換されます。

そもそもPythonに関係のない変換を求めています。これは、あなたが要求した型とそのPython同等物のリストです。

  • 符号なしおよび符号付きint 8ビット、int
  • 符号なしおよび符号付きint 16ビット、int
  • 符号なしおよび符号付き整数32ビット、符号なし:long、符号付きint
  • 符号なしおよび符号付きint 64ビット、long

  • double、float

  • float、float
  • 文字列、これはあなたが始めなければならなかったものです

私は以下が何であるかを知らないので、Python同等物を知りません。

  • 符号なしおよび符号付き8ビット、
  • 符号なしおよび符号付き16ビット、
  • 符号なしおよび符号付き32ビット、
  • 符号なしおよび符号付き64ビット。

int()long()、およびfloat()のすべての重要な変換が既にあります。

3
S.Lott

Pythonには、単一のint型のみがあります。文字列をintに変換するには、次のようにint()を使用します。

_>>> str = '123'
>>> num = int(str)
>>> num
123
_

編集:また、floatに変換するには、float()をまったく同じ方法で使用します。

2
Jeremy Ruten

Modbusから16ビットの符号付き2の補数として値が渡されるという問題が発生しました。これを署名付きの数値に変換する必要がありました。私はこれを書いてしまいましたが、うまくいくようです。

# convert a 32 bit (prob) integer as though it was 
# a 16 bit 2's complement signed one
def conv_s16(i):
    if (i & 0x8000):
        s16 = -(((~i) & 0xFFFF) + 1)
    else:
        s16 = i
    return s16
0
user50619

これ以上の情報がなければ、必ずしもうまく答えられるとは思いません。他の人が言ったように、python-この言語は、低レベルのプログラミング言語のビット幅と符号付きの原型に準拠していません。

Python内で完全に操作している場合、おそらく間違った質問をしていることになります。おそらく、必要なことを行うためのより良い方法があります。

たとえば、Cコードやネットワークを介して相互運用している場合、areこれを行う方法があり、以前の投稿への答えがその手段をかなり便利にカバーしているように見えます。

0
Jorenko