У меня есть данные string data2 = " %04%02%BC%94%BA%15%E3%AA%08%00%7F%00";
Я пытаюсь разделить каждые две цифры между знаком %
и поместить его в массив.Обработка строк и их разделение
В дополнение к этому, если есть дополнительная цифра, то есть более двух цифр, преобразовать в Hex и добавить его в массив.
Мой код работает иногда, но когда я добавляю дополнительную цифру во второй последней позиции, она дает неправильные значения.
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
.
ли вы, ребята, видите, что не так и как это исправить?
Как правильно вывести данные? Как вы получаете '46' из' 0x04' или '0x4F', в зависимости от того, как вы хотите обрабатывать дополнительные шестнадцатеричные цифры? –
@RogerLipscombe - '04F' переведен на' 04 46'. 'F' преобразуется в шестнадцатеричный – Liban
и как это« правильно »? '0x04F' -' 79'. '0x04' -' 4'. '0x4F' по-прежнему' 79'. Как вы получаете '04 46' от' 0x04F'. В бесчисленной системе, с которой я знаком, это происходит ... –