我有一個數據string data2 = " %04%02%BC%94%BA%15%E3%AA%08%00%7F%00";
我想分割%
標誌之間的每兩位數字並將其放入數組中。字符串操作和分割
除此之外,如果有額外的數字,即超過2位數,轉換爲十六進制並將其添加到數組。
我的代碼有時會工作,但是當我在第二個位置添加多餘的數字時,它會給出錯誤的值。
string data = " %04F%02%BC%94%BA%15%E3%AA%08%00%7FF%00";
List<string> Values = new List<string>();
string[] val = Regex.Split(data2, "%");
byte[] TempByte = new byte[val.Length - 1];
for (int i = 0; i < val.Length; i++)
{
Values.Add(val[i]);
if (Values[i].Length > 2)
{
//count
int count = 0;
int n = 2; //start from digit 2(if ther is any)
foreach (char s in Values[i])
{
count++;
}
int index = count - 2; //index starting at 2
while (n <= Values[i].Length -1)
{
string temp = string.Join(string.Empty, Values[i].Substring(n, 1).Select(c =>
((int)c).ToString("X")).ToArray());
Values.Add(temp);
n = n + 1;
}
//remove the extra digit
Values[i] = Values[i].Replace(Values[i].Substring(2, 1), string.Empty);
}
}
Values.RemoveAt(0); //since digit 0 is always zero
string[] TagTemp = Values.ToArray();
//Convert to array
for (int i = 0; i < val.Length - 1; i++)
{
TempByte[i] = Convert.ToByte(TagTemp[i], 16);
}
當額外的數字被添加到第一位置,即04F
,輸出是正確的:
當它被添加倒數第二個位置,即7FF
而不是7F 46
它給剛7
。
。你們看看什麼是錯的,如何解決呢?
輸出如何正確?你如何從'0x04'或'0x4F'獲得'46',這取決於你想如何處理額外的十六進制數字? – 2013-03-18 09:48:02
@RogerLipscombe - '04F'被翻譯成'04 46'。 'F'被轉換爲十六進制 – Liban 2013-03-18 10:14:50
,這是如何「正確」? '0x04F'是'79'。 '0x04'是'4'。 「0x4F」仍然是「79」。你如何從'0x04F'獲得'04 46'。在我沒有熟悉的數字系統中,這是否會發生... – 2013-03-18 10:55:37