Pythonの文字列を、符号なしおよび符号付き8、16、32、64ビットのint、double、float、stringなどの他のタイプに変換する必要があります。
これどうやってするの?
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ビットの浮動小数点はありません。
以下のタイプは、ほとんどの場合、Pythonには存在しません。Pythonでは、文字列はint、long、またはfloatに変換されます。
そもそもPythonに関係のない変換を求めています。これは、あなたが要求した型とそのPython同等物のリストです。
符号なしおよび符号付きint 64ビット、long
double、float
私は以下が何であるかを知らないので、Python同等物を知りません。
int()
、long()
、およびfloat()
のすべての重要な変換が既にあります。
Pythonには、単一のint
型のみがあります。文字列をint
に変換するには、次のようにint()
を使用します。
_>>> str = '123'
>>> num = int(str)
>>> num
123
_
編集:また、floatに変換するには、float()
をまったく同じ方法で使用します。
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
これ以上の情報がなければ、必ずしもうまく答えられるとは思いません。他の人が言ったように、python-この言語は、低レベルのプログラミング言語のビット幅と符号付きの原型に準拠していません。
Python内で完全に操作している場合、おそらく間違った質問をしていることになります。おそらく、必要なことを行うためのより良い方法があります。
たとえば、Cコードやネットワークを介して相互運用している場合、areこれを行う方法があり、以前の投稿への答えがその手段をかなり便利にカバーしているように見えます。