2011-07-09 153 views
1

我對C很陌生,所以有點困惑。將int16轉換爲字節數組

我想將int16轉換爲byte []數組。

我有一個int16像-200,我想將它轉換成一個byte [2]數組,如下面的例子。

Velocity = -200 = hex FF38 = [hex FF] [hex 38] = [255] [56] 

我取值,並將其傳遞給串口像下面,但我需要通過INT16,並有一個函數將其轉換爲字節[]我。

Serial.print(255,BYTE); 
Serial.print(56,BYTE); 

我發現下面的代碼,但不能讓它的工作

Serial.print((velocity & 0xff00) >> 8, BYTE); 
Serial.print(velocity & 0xff, BYTE); 

任何建議?任何幫助,將不勝感激。

+0

在你最後的例子中什麼都不起作用? – nos

+0

你是什麼意思,你「不能得到它的工作」?您是否嘗試過使用printf或其他什麼來查看'(velocity&0xFF00)>> 8'的結果是什麼? – jtbandes

+0

'Serial.print' ...嗯...你確定你的代碼是C,而你的編譯器是C? 'print'是結構類型對象的函數指針部分嗎?無論如何...爲什麼它不起作用?什麼是編譯器消息?發生什麼或沒有發生? *幫助我們幫助你*並確保語言 – pmg

回答

3

你的方法看起來不錯,但也許你會被endianness問題絆倒?

串行協議在位和/或字節級別(可能不同)也可以被認爲是小端或大端。許多串行接口(如無處不在的USB)在比特級上都是小端的。像RS-232,RS-422和RS-485等物理標準也通常用於先發送最低有效位的UART ...

您的代碼首先發送最高有效字節(「big-endian」 )。