CのSerialを介して2バイトのバイナリ情報を受信しています。Cのバイナリをcharで受け取るビット単位の演算
charで受け取っています。
私はintを作るために2つの文字に参加する必要がありますが、私はそれを行う方法がわかりません。最初のバイトのすべてはバイナリ形式でchar形式ではありません。私のプログラムに使用できる形式。
CのSerialを介して2バイトのバイナリ情報を受信しています。Cのバイナリをcharで受け取るビット単位の演算
charで受け取っています。
私はintを作るために2つの文字に参加する必要がありますが、私はそれを行う方法がわかりません。最初のバイトのすべてはバイナリ形式でchar形式ではありません。私のプログラムに使用できる形式。
あなたはこのようなものを使用することができます。
はint my_int=char1;
myint<<=8;
myint|=char2;
これはchar1
は、最上位バイトが含まれている前提としています。それ以外の場合は1と2を切り替えます。
これは、charも符号なしとみなします。 –
符号拡張の問題を回避するためにunsigned char
を使用しています。スタートのために
val16 = char1 * 256 + char2;
、あなたが符号拡張等と何の問題を持っていないだけので符号なし文字でそれらを受ける方が良いでしょう。
あなたがそれらを結合する場合は、のようなものを使用することができます
int val = ch1; val = val << 8 | ch2;
か:
int val = ch2; val = val << 8 | ch1;
お使いのシステムのエンディアンに依存し、あなたのシステムが8を持っていると仮定し-bit char
タイプ。
MSB(最上位バイト)が最初に来る場合:
unsigned char array[2];
...
int bla;
bla = array[1] | (array[0] << 8);
LSB(最下位バイト)の場合は、最初に来る:
bla = array[0] | (array[1] << 8);
第一又は第二の最上位バイトですか? –
各charをintに変換し、上位バイトをビットシフトして一緒に加算します。 – Bort