我想略微修改讀取串行數據的USB設備的一些示例代碼。數據顯示的當前方式非常混亂。該設備讀取30位數據。以下代碼段是我試圖操作的...C#中的數據操作 - 字符串
private string GetDataString()
{
string strTemp;
strTemp = "";
if ((m_Msg.MSGTYPE & TPCANMessageType.PCAN_MESSAGE_RTR) == TPCANMessageType.PCAN_MESSAGE_RTR)
return "Remote Request";
else
// UNCOMMENT FOR DECIMAL
for (int i = Form1.GetLengthFromDLC(m_Msg.DLC, (m_Msg.MSGTYPE & TPCANMessageType.PCAN_MESSAGE_FD) == 0) - 1; i >= 0; i--)
strTemp += string.Format("{0:000} ", m_Msg.DATA[i]);
//// UNCOMMENT FOR HEX
//for (int i = Form1.GetLengthFromDLC(m_Msg.DLC, (m_Msg.MSGTYPE & TPCANMessageType.PCAN_MESSAGE_FD) == 0) - 1; i >= 0; i--)
// strTemp += string.Format("{0:X2} ", m_Msg.DATA[i]);
return strTemp;
}
返回的字符串是兩種格式之一,具體取決於我取消註釋的部分。下面是在每個格式讀出的樣品:
「000 000 123 255」(十進制)
「00 00 7B FF」(十六進制)
的問題是,有編碼信息的兩個部分這裏:最右邊的12位數據(稱爲ST)和接下來的18位(稱爲這些MT)。數據以little-endian格式顯示(LSB在右邊)。我正在嘗試修改這部分代碼以通過其相應的十進制值顯示每個部分。
所以上面的例子將被顯示爲:
「7 3071」
(MT)(ST)
關於如何執行此轉換的任何建議?如果這是一個愚蠢的問題,我很抱歉,但我對C#編程經驗不足。
http://stackoverflow.com/questions/17523699/how-to-work-with-the-bits-in-a-byte可能會有所幫助 – Chris