【问题标题】:Convert and parse data string转换和解析数据字符串
【发布时间】:2016-12-26 15:21:08
【问题描述】:

我对 C# 很陌生。我想做的是:

取一个字符串(在我的代码中是rawData),按照如下格式解析:

1) 前两个字符是 PGN 数据长度(以十六进制表示),即0B == 11,即下面描述的第 (3) 段的长度。

2) 字符 2 到 6 是十六进制的 PGN 编号,即00FEE9 == 65257

3) 步骤 1 中找到的字符 6 到 (6 + Convert.ToInt32(0B)) 是十六进制数据。

我知道我需要执行以下操作: a) 解析字符串并将字符从十六进制转换为十进制。 b) 当字符串有几个数据组合实例时拆分每个段(一条消息中有 1、2、3 的多个段)。

我尝试使用int.ParseConvert.ToInt32,但无济于事。

这是我目前的代码:

string rawData = "*TS01,351581053233312,194027161216,GPS:3;N36.397814;W82.483871;13;104;1.35,STT:242;0,MGR:107,ADC:0;13.68;1;23.33;2;3.89"+
            "CAN:0B00FEE9B4D8040020D604000B00FEE86932F50CFFFF5C5D0B00FEE00100FFFFFFE0FE000B00FEE50100FFFFFFE5FE00,EGT:4409,EVT:1#";

string rawData1 = "*TS01,351581053233312,194027161216,GPS:3;N36.397814;W82.483871;13;104;1.35,STT:242;0,MGR:107,ADC:0;13.68;1;23.33;2;3.89" +
            "CAN:0B00FEE9B4D8040020D60400,EGT:4409,EVT:1#";

int CANindex = rawData.IndexOf("CAN:");

string CANmessage = rawData1.Substring(CANindex + 4);
string CANmessage1 = CANmessage.Split(',').First();

Console.WriteLine("CANMessage1: " + CANmessage1);
/*Console.WriteLine("CANmessage1.Substring(0, 2): " + CANmessage1.Substring(0, 2));*/

string pgnDataLength = CANmessage1.Substring(0, 2);
char[] pgnDataLengthArray = pgnDataLength.ToCharArray();

string pgnNumber = CANmessage1.Substring(2, 6);
char[] pgnNumberArray = pgnNumber.ToCharArray();

Console.WriteLine("pgnDataLength: " + pgnDataLength);
Console.WriteLine("pgnNumber: " + pgnNumber);

/*int hexvalue = int.Parse(pgnString);
Console.WriteLine("hexvalue: " + hexvalue);
*/
/*
int PGNDataLength = Convert.ToInt32(CANmessage1.Substring(0, 2));
Console.WriteLine("PGNDataLength: " + PGNDataLength);
*/
Console.Read();

【问题讨论】:

    标签: c# string parsing hex type-conversion


    【解决方案1】:

    试试这个: int decValue = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

    int decValue = Convert.ToInt32(hexValue, 16);

    【讨论】:

      【解决方案2】:

      知道了!

      int pgnDataLength = Convert.ToInt32(pgnDataLengthStr, 16);
      int pgnNumber = Convert.ToInt32(pgnNumberStr, 16);
      

      【讨论】:

      • pgnDataLengthStrpgnNumberStr 是什么?
      • 您可以将我的答案标记为正确的答案。我是否解释了一些不同的内容??
      • @L.B 字符串 pgnNumberStr = CANmessage1.Substring(2, 6) 和字符串 pgnDataLengthStr = CANmessage1.Substring(0, 2);
      猜你喜欢
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 2013-03-03
      相关资源
      最近更新 更多