Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-字符串中的数据操作_C# - Fatal编程技术网

C#-字符串中的数据操作

C#-字符串中的数据操作,c#,C#,我试图稍微修改一些USB设备读取串行数据的示例代码。当前显示数据的方式非常混乱。该设备读取30位的数据。下面的代码部分是我试图操作的 private string GetDataString() { string strTemp; strTemp = ""; if ((m_Msg.MSGTYPE & TPCANMessageType.PCAN_MESSAGE_RTR) == TPCANMessag

我试图稍微修改一些USB设备读取串行数据的示例代码。当前显示数据的方式非常混乱。该设备读取30位的数据。下面的代码部分是我试图操作的

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)可能有帮助可能有帮助这就成功了。谢谢!我花了好几个小时才让它工作。这就成功了。谢谢!我花了好几个小时才让它工作。