Typecasting Python
質問
I変換する必要があるPythonの文字列の種類などの署名の符号なし8,16,32,64ビットのint,double山、文字列です。
する方法を教えてください。
解決
はint
機能付き32ビット符号付き整数に文字列を変換することができます:
str = "1234"
i = int(str) // i is a 32-bit integer
文字列が整数を表していない場合は、、あなたはValueError
例外を取得します。文字列が整数を表していますが、その整数は32ビット符号付き整数に適合しない場合は、あなたが実際に代わり型long
のオブジェクトを取得しますこと、しかし、注意します。
あなたは、その後、いくつかの簡単な数学と他の幅とsignednessesに変換することができます:
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ビットの浮動小数点数はありません。
他のヒント
以下の種類の一部が存在しないPythonの場所です。Pythonでは、文字列に変換されint,long値は浮かぶので、ことになるすべてでございます。
まいの変換なるPython。このリストの種類の使い方とそのPython等価です。
- 符号なし、署名したint8ビット int
- 符号なし、署名したint16ビット、 int
- 符号なし、署名したintが32ビット符号なし: 長, 署名 int
符号なし、署名したint64ビット 長
ダブル、 float
- float、 float
- 文字列、 これがまた始まる
どうなるかはわからないのでわからないPythonの等価です。
- 符号なし、署名した8ビット、
- 符号、符号付き16ビット
- 符号、符号付き32ビット、
- 符号なし、署名または64ビット.
だき,誠にありがとうござい全ての変換: int()
, long()
や float()
.
Pythonのみならず、シングル int
タイプです。変換する文字列 int
, -利用 int()
このように:
>>> str = '123'
>>> num = int(str)
>>> num
123
編集: ものへの変換には浮き輪の利用 float()
全く同じです。
私は、これは必ずしもより多くの情報がなくても答えることができるとは思いません。他の人が言ったように、Pythonでのみintとlong整数のがある - 言語は下位レベルのプログラミング言語のビット幅や符号の有無のアーキタイプに準拠していません。
。 あなたのpython内に完全に動作している場合は、、あなたはおそらく間違った質問をしています。あなたが必要なものを行うには良い方法はおそらくあります。
あなたは、例えば、と相互運用している場合は、Cコードは、ネットワークを介して、そこのこれを行うには、の方法があり、それはあなたの以前の投稿への答えのように見えますが、かなり手際よくその道をカバーます。
私はちょうど今、私は16ビットのMODBUSからの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