string data2 = " %04%02%BC%94%BA%15%E3%AA%08%00%7F%00";
記号の間で2桁ごとに分割%
して配列に入れようとしているデータがあります。
それに加えて、余分な桁がある場合、つまり2桁を超える場合は、16進数に変換して、配列に追加します。
コードが機能することもありますが、最後から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
、出力は正しいです。
最後から2番目の位置が追加されると、つまり、7FF
代わりに。7F 46
だけが表示され7
ます。
何が悪いのか、そしてそれを修正する方法がわかりますか?