2017-05-02 9 views
0

私はパラメータとして 'data'を受け入れる関数を持っています。 Pythonには初めてのことなので、それもタイプであるとは本当にわからなかった。Pythonはビット単位で定義します

私はそのタイプのものを印刷するとき、私は文字Hをコードする場合、それは

b'h' 

だろう気づきました。それは私には分かりません。 1や0など、Pythonでビットを定義する方法はありますか?b'h 'は16進数でなければならないと思いますか?単純に8ビットの文字列を定義する方法はありますか?

bits1 = 10100000 
+0

"データ"は意味がないほど広いです。 *バイナリ*データが必要ですか? – deceze

+0

あなたの出力には 'b'プリフィックスが含まれているので、これはPython 3と仮定しています(Python 2の' bytes == str'のため)。これが間違っている場合は、Python 2が使用されていることを示すように変更してください。 –

答えて

3

あなたは無関係なものを多数組み合わせています。

まず、(Python 3で)bという接頭辞付きの引用符付きリテラルは、タイプbytesです。これは、生のバイト値の文字列を意味します。例:

x = b'abc' 
print(type(x))  # will output `<class 'bytes'>` 

これは(Unicode)の文字列であるstrタイプとは対照的です。

整数リテラルは、接頭辞0bを使用してバイナリで表すことができます。

y = 0b10100000 
print(y)   # Will output 160 
0

「データ」はタイプではありません。あなたの関数(たぶん)は、その型にかかわらず、あなたが渡したものを受け入れます。

今、b'h'「は、そのバイナリシーケンスチャー'h'にマップ番号(INT)」、これは16進数ではなく、intための標準的なサイズである可能性が8ビット(1バイトと数を意味し、 char)。

'h'のASCIIコードは、バイナリでb '\ b01101000'またはヘキサb '\ x68'で書かれた104(10進数)です。

これは私があなたが探していると思う答えです:バイナリ表現から8ビット整数をコーディングしたい場合はb'\b01101000'(104)と入力してください。よりコンパクトで読みやすいように、代わりにhexaを使用することをお勧めします。ヘキサでは、4ビットごとに0からfまでのシンボルが作成され、4ビットごとにシンボルを連結してより大きな数を形成することができます。したがってビット列01101000はb '\ b0110 \ b1000'またはb '\ x6 \ x8'と書かれ、b '\ x68'と書くことができます。前のbは、引用符の前に、エスケープ文字を使用する代わりに、文字列を\ bまたは\ x(または小数点の場合は\ d)で定義されるベースで表現されたバイナリシーケンスとして解釈するようにPythonに指示します。

関連する問題