我对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.Parse
和Convert.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();
答案 0 :(得分:0)
试试这个: int decValue = int.Parse(hexValue,System.Globalization.NumberStyles.HexNumber);
或
int decValue = Convert.ToInt32(hexValue,16);
答案 1 :(得分:-1)
知道了!
int pgnDataLength = Convert.ToInt32(pgnDataLengthStr, 16);
int pgnNumber = Convert.ToInt32(pgnNumberStr, 16);