2012-02-10 58 views
0

我通過C中的串行接收2個字節的二進制信息。按字母順序在C中接收二進制文件

我正在接收它們的字符。

所以我需要加入2個字符作出一個整數,但林不知道如何做到這一點..首先第一個字節是二進制格式,而不是字符格式..所以我不確定如何將其轉換爲一個適用於我的程序的可用表單。

+0

是最受顯著字節的第一或第二? – 2012-02-10 09:30:12

+0

將每個char轉換爲int,將高位字節移位並將它們加在一起 – Bort 2012-02-10 09:31:04

回答

4

只是OR他們在一起嗎?

x = (b1 << 8) | b2; 

確保它們沒有簽名或相應地轉換(轉移簽名的東西是討厭的)。

+0

將不會'b1 << 8'溢出? – asaelr 2012-02-10 10:31:25

+0

@asaelr它會被提升到更高的類型。 – cnicutar 2012-02-10 10:32:53

1

您可以使用這樣的事情:

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

這是假設char1包含最顯著字節。否則切換1和2。

+0

這也假定char是無符號的。 – 2012-02-10 09:52:03

1

使用unsigned char來避免符號擴展問題。

val16 = char1 * 256 + char2; 
1

一開始,這將是更好地接受他們在無符號字符只是讓你有符號擴展之類沒有問題。

如果你想將它們結合起來,你可以使用類似:

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

或:

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

根據系統的字節序,並假設您的系統有一個八位char類型。

0

如果MSB(最高有效字節)是第一位的:

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

如果LSB(最低有效字節)是第一位的:

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