2016-12-26 9 views
-1

私はC#でかなり新しいです。私は何をしたいことは以下の通りです:データ文字列を変換して解析します

は(それがrawDataである私のコードで)文字列を取り、次の形式に応じてそれを解析:

1)最初の2つの文字は六角でPGNデータ長さ、すなわち0B == 11であり、これは後述するピース(3)の長さである。 6を介して

2)文字2進データであるステップ1で見つかった(6 + Convert.ToInt32(0B))を通してヘクスでPGN番号、すなわち00FEE9 == 65257

3)文字6 isthe。

私は次のことを行う必要があることを知っています。 a)文字列を解析し、16進数から10進数に変換します。 b)文字列がデータの組み合わせのいくつかのインスタンス(1つのメッセージに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

ありがとうございました!

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

「pgnDataLengthStr」または「pgnNumberStr」とは何ですか? –

+0

あなたは私の答えを正しいものとしてマークすることができます。私は何か別のものを説明しましたか? –

+0

@ L.B文字列pgnNumberStr = CANmessage1.Substring(2,6)および文字列pgnDataLengthStr = CANmessage1.Substring(0、2); –

関連する問題