24

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

これどうやってするの?

4

5 に答える 5

45

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 float は、他の言語で と呼ばれるものdoubleです。つまり、これらは 64 ビットです。Python には 32 ビットの float はありません。

于 2008-12-22T04:44:48.280 に答える
3

次の型は、ほとんどの場合、そもそも Python には存在しません。Python では、文字列は int、long、または float に変換されます。

そもそも Python に関係のない変換を求めています。これは、あなたが求めたタイプとそれに相当する Python のリストです。

  • unsigned および signed int 8 ビット、int
  • unsigned および signed int 16 ビット、int
  • unsigned および signed int 32 ビット、unsigned: long、signed int
  • unsigned および signed int 64 ビット、 long

  • ダブル、 フロート

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

私は以下が何であるかわからないので、Python に相当するものを知りません。

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

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

于 2008-12-22T12:15:11.537 に答える
2

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

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

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

于 2008-12-22T04:42:51.573 に答える
0

これ以上の情報がなければ、必ずしもうまく答えられるとは思いません。他の人が言ったように、Python の整数には int と long しかありません。この言語は、下位レベルのプログラミング言語のビット幅と符号の原型に準拠していません。

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

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

于 2008-12-22T16:22:34.143 に答える
0

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
于 2019-02-05T15:42:07.887 に答える