C#-字符串中的数据操作
我试图稍微修改一些USB设备读取串行数据的示例代码。当前显示数据的方式非常混乱。该设备读取30位的数据。下面的代码部分是我试图操作的C#-字符串中的数据操作,c#,C#,我试图稍微修改一些USB设备读取串行数据的示例代码。当前显示数据的方式非常混乱。该设备读取30位的数据。下面的代码部分是我试图操作的 private string GetDataString() { string strTemp; strTemp = ""; if ((m_Msg.MSGTYPE & TPCANMessageType.PCAN_MESSAGE_RTR) == TPCANMessag
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”(十进制)
“007B FF”(十六进制)
问题是这里编码的信息有两部分:最右边的12位数据(称为ST)和后面的18位数据(称为MT)。数据以小尾端格式显示(右侧为LSB)。我试图修改这段代码,通过相应的十进制值显示每个部分
因此,上述示例将显示为:
“7 3071”
(MT)(ST)
关于如何执行此转换有何建议?如果这是一个愚蠢的问题,我提前表示歉意,但我在C#编程方面非常缺乏经验。您必须执行一些位操作。它看起来像这样:
uint MT, ST;
MT = (uint)((m_MSG.DATA[3] & 0x3F) << 12);
MT |= (uint)(m_MSG.DATA[2] << 4);
MT |= (uint)((m_MSG.DATA[1] & 0xF0) >> 4);
ST = (uint)((m_MSG.DATA[1] & 0x0F) << 8);
ST |= m_MSG.DATA[0];
uint MT,ST;
MT=(uint)((消息数据[3]&0x3F)4);
ST=(uint)((m_MSG.DATA[1]&0x0F)您必须执行一些位操作。它看起来像这样:
uint MT, ST;
MT = (uint)((m_MSG.DATA[3] & 0x3F) << 12);
MT |= (uint)(m_MSG.DATA[2] << 4);
MT |= (uint)((m_MSG.DATA[1] & 0xF0) >> 4);
ST = (uint)((m_MSG.DATA[1] & 0x0F) << 8);
ST |= m_MSG.DATA[0];
uint MT,ST;
MT=(uint)((消息数据[3]&0x3F)4);
ST=(uint)((m_MSG.DATA[1]&0x0F)可能有帮助可能有帮助这就成功了。谢谢!我花了好几个小时才让它工作。这就成功了。谢谢!我花了好几个小时才让它工作。