2016-05-04 17 views
0

私はPythonプログラミングには新人ですが、Cで経験があります。私はPythonのcharに相当するものを理解できません。私が読んだことから、1つではありません。 Pythonの "char"は1文字の文字列です。実際には、ユニコードの場合は1バイト以上になることさえあります。私は、128バイトの長さでヌルを含むバイト(読み込み文字)を使ってデータのパケットを作成する必要があります。私はそのパケットを一連のバイトとしてシリアルポートに書きたいと思っています。PythonのCスタイルの文字

のPythonの同等いただきました:あなたはCの文字とバイト間の重複が整理は、Pythonに引き継がれます

char buffer[128]; 
buffer[12] = '0x04' 
buffer[15] = '0x00' 
    ...etc 
+2

これは役に立ちますか? http://stackoverflow.com/questions/25116/binary-buffer-in-python –

答えて

3

を前提としています。それはしません。文字列は文字列であり、数字は数字です。 python2にはまだまだ混乱がありますが、python3はそれらを完全に別々にします(bytesstr)。

あなたがその前提を取り除き、達成したいものから始めるのがおそらく最も良いでしょう。基本的に、特定の値を持つバイトの配列を生成しようとしています。 bytes([0x04, 0x00, ...])

  1. 番号のリストを変換してバイトオブジェクトを作成します。次の2つの方法(少なくとも)でそれを行うことができます。または、バイト文字列を結合する:b'\x04\x00' + b'\x....'

  2. structモジュールを使用して、定義済みのスキーマからパケット全体を作成します。たとえば、struct.pack("cccc", 0x04, 0x00, ...)

+0

ありがとうございます。これはバイナリバッファへのポインタを含んでいます。しかし、ちょうどペタントであることは、バイトコードの配列をバイト文字列で呼び出すことによって、Pythonが(実際には拡張して)混乱することはありませんか?私にとっては、文字列はヌルで終了する配列です...あなたはそれが文字列であると推測しました – dpetican

+0

python3以降、これらは公式に "バイトオブジェクト"です。バイト文字列は私の正式な名前ではなく、スリップしていました。 (https://docs.python.org/3.5/reference/datamodel.html#the-standard-type-hierarchy)Python2の文字列は、それらを一緒にマッシュさせるためです(「文字は少なくとも8ビットのバイトを表します)。 ")答えを確定しました。 – viraptor