2012-02-10 15 views
0

CのSerialを介して2バイトのバイナリ情報を受信して​​います。Cのバイナリをcharで受け取るビット単位の演算

charで受け取っています。

私はintを作るために2つの文字に参加する必要がありますが、私はそれを行う方法がわかりません。最初のバイトのすべてはバイナリ形式でchar形式ではありません。私のプログラムに使用できる形式。

+0

第一又は第二の最上位バイトですか? –

+0

各charをintに変換し、上位バイトをビットシフトして一緒に加算します。 – Bort

答えて

4

一緒にジャストORそれらを?

x = (b1 << 8) | b2; 

署名されていないか、それに応じてキャストされていることを確認してください(署名されたものは厄介です)。

+0

しません 'B1 << 8'オーバーフロー?それ@asaelr – asaelr

+0

が高いタイプに昇格されます。 – cnicutar

1

あなたはこのようなものを使用することができます。

int my_int=char1; 
myint<<=8; 
myint|=char2; 

これはchar1は、最上位バイトが含まれている前提としています。それ以外の場合は1と2を切り替えます。

+0

これは、charも符号なしとみなします。 –

1

符号拡張の問題を回避するためにunsigned charを使用しています。スタートのために

val16 = char1 * 256 + char2; 
1

、あなたが符号拡張等と何の問題を持っていないだけので符号なし文字でそれらを受ける方が良いでしょう。

あなたがそれらを結合する場合は、のようなものを使用することができます

int val = ch1; val = val << 8 | ch2; 

か:

int val = ch2; val = val << 8 | ch1; 

お使いのシステムのエンディアンに依存し、あなたのシステムが8を持っていると仮定し-bit charタイプ。

0

MSB(最上位バイト)が最初に来る場合:

unsigned char array[2]; 
... 
int bla; 
bla = array[1] | (array[0] << 8); 

LSB(最下位バイト)の場合は、最初に来る:

bla = array[0] | (array[1] << 8);