Я пишу код для Arduino C ++.
У меня есть байтовый массив с шестнадцатеричными байтовыми значениями, например:
20 32 36 20 E0 EC 20 F9 F0 E9 E9 E3 F8 5C 70 5C 70 5C 73 20 E3 E2 EC 20 F8 E0 E5 E1 EF 20 39 31 5C
В этих байтах четыре цифры ASCII:
HEX 0x32 - это номер 2 в коде ascii
HEX 0x35 - это номер 5 в коде ascii
HEX 0x39 - это номер 9 в коде ascii
и т. Д.on ....
https://www.ascii -codes.com / cp862.html
Таким образом, шестнадцатеричные значения 32, 36 представляют число 26, а 39, 31представляют 91.
Я хочу найти эти числа и инвертировать каждую группу, чтобы (в этом примере) 62 и 19 были представлены вместо 26 и 91.
Таким образом, выходные данные должнывыглядят так:
20 36 32 20 E0 EC 20 F9 F0 E9 E9 E3 F8 5C 70 5C 70 5C 73 20 E3 E2 EC 20 F8 E0 E5 E1 EF 20 31 39 5C
Числа не обязательно должны быть двумя цифрами, но могут быть чем угодно в 0-1000
Я также знаю, что каждая группатаким числам предшествует шестнадцатеричное значение 20
, если это помогает.
Я сделал это в C # (с некоторой помощью пользователей переполнения стека :-)):
string result = Regex.Replace(HexMessage1,
@"(?<=20\-)3[0-9](\-3[0-9])*(?=\-20)",
match => string.Join("-", Transform(match.Value.Split('-'))));
private static IEnumerable<string> Transform(string[] items)
{
// Either terse Linq:
// return items.Reverse();
// Or good old for loop:
string[] result = new string[items.Length];
for (int i = 0; i < items.Length; ++i)
result[i] = items[items.Length - i - 1];
return result;
}
Может кто-нибудьмне помочь заставить его работать на C ++?