を返しました。
これは直観的ではないかもしれませんが、ピューターb''
の構文はbinary, but bytesの略語なので、なぜb'0010101'
が好きなように動作しません。
バイトはデフォルトで16進データをバイトとして受け入れます。これを行うには、16進データをb'\xFF\x04'
としてフォーマットする必要があります。例えば、
byte_obj = bytes(b'\xFF\x04')
これは、pyserialを介して送信することができます。バイナリを行うには、python int
の構築方法、つまりint(number, base)
メソッドを使用する必要があります。
は、これはさらにhere
を説明したが、これは基本的にサイズのみ8ビットのバイナリ文字列のために働くことを残念ながら
bin_to_int int('01010101', 2)
byte_obj = bytes([bin_to_int]) #requires array of ints
を介して行うことができます(そして、それはそうあなたに言って、あなたにエラーが発生します) 。これを回避するためには、次の操作を実行できます
bin_to_int int('0101010101010101', 2)
# to_bytes takes size in bytes and endianess, which is the order the bytes are placed.
byte_obj = bin_to_int.to_bytes(2, 'little')
リトルエンディアンであるleast significant byte in smallest address(つまり、インデックス0)大きいが
が大きく進整数の方法のように注意してください反対ですが、私はわからないんだけどPythonが内部的にバイナリを整数に変換するのは何ですか?しかし、任意の大きなバイナリデータに対して、私は変換をどうやって実装するのかによって遅くなると思います。
bit_string = "101010101..."
exponent = 0
decimal_value = 0
for bit in bit_string:
decimal_value += int(bit)**exponent
exponent += 1
それは最初は非常に明白ではないかもしれませんが、Pythonのint型がarbitrailyサイズであるため、最終的にはあなたが得ようとしている:私はあなたに私は符号なし整数への変換バイナリを行うだろうかに理由の例をあげます通常の算術intサイズ(すなわち64ビットより大きい)の外で、非常に大きなintを一緒に追加するところまでです。これは、大規模なバイナリ値(あなたが生成する可能性が高い)の時間が経つにつれて、Nが加算のバイト単位でサイズを増やし、64ビット外で増加すると非線形時間の複雑さを得ることになることを意味します
これを解決するには、バイナリ値をバイトで変換する前にバイナリ値を区切る関数を作成するだけで済みます(これはO(1)の代わりにO(n_bytes)になります)。 (binary_to_bytes(binary_string)
のような)
出典
2017-05-02 03:57:44
snb
あなたがしようとしていることは明確ではありません。あなたが入力したいものとそれから生成されることを期待するものを表示できますか? –