2015-04-01 129 views
1

我正在從加速度計讀取字符格式的二進制數據,它由高位字節和低位字節組成。我從事C++工作很長時間,通常只使用更高層次的東西。 我有以下功能:將2個字符轉換爲ascii二進制代碼

short char2short(char* hchar, char* lchar) 
{ 
    char temp[2]; 
    temp[0] = *hchar; 
    temp[1] = *lchar; 

我怎樣可以得到的值轉換爲一個整數?據我所知,atoi的作用不同(例如「21」= 21)。 我可以只將char轉換爲int嗎?但是它如何處理更高位和更低位? 在此先感謝您的幫助!

回答

1

您應該將字節存儲爲無符號位,以避免移位符號位的問題。

short char2short(unsigned char hchar, unsigned char lchar) 
{ 
    return static_cast<short>(lchar | (hchar << 8)); 
} 

您可能還想使用unsigned short。這取決於你的期望。

+0

你中途停下來:'uint8_t'是8位參數的正確類型。 char(有符號或無符號)實際上可能不是。結果相同:使用'uint16_t'。請注意,您需要投射操作的結果,因爲它是'int',而不是'short'或'uint16_t'。否則,你可能會得到一個截斷警告(取決於'sizeof(int)')。 – Olaf 2015-06-03 02:47:45

+0

我只是在他的問題中使用了這些類型..但是你對演員表是正確的。 – 2015-07-14 20:58:13

+0

劇組是多餘的;無論如何,'return'表達式被轉換爲返回類型 – 2015-07-15 01:35:10

相關問題