2016-12-26 218 views
-1

我是C#的新手。我想這樣做的是以下幾點:轉換和解析數據字符串

一個字符串(在我的代碼是rawData),按以下格式解析它:

1)前兩個字符是十六進制PGN的數據長度,即0B == 11,這是下面描述的件(3)的長度。

2)字符2至6 isthe十六進制PGN數,即00FEE9 == 65257

3)字符6通過在步驟1中找到(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(); 

回答

0

試試這個: INT decValue = int.Parse(hexValue,System.Globalization.NumberStyles.HexNumber);

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

-1

Got it!

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

什麼是'pgnDataLengthStr'或'pgnNumberStr'? –

+0

你可以標記我的答案是正確的..我有解釋不同的東西嗎? –

+0

@ L.B string pgnNumberStr = CANmessage1.Substring(2,6)和string pgnDataLengthStr = CANmessage1.Substring(0,2); –