我正在为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数字:
十六进制0x32是ASCII码中的数字
十六进制0x35是ASCII码中的数字5
十六进制0x39是ASCII码中的数字9
以此类推。...
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#中做到了这一点(在Stack溢出用户的帮助下:-)):
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 ++上运行吗?
答案 0 :(得分:0)
逐个元素遍历数组,查找0x32
或0x39
。如果找到,请检查下一个字节(如果在范围内)以查看其分别与0x36
或0x31
相匹配。如果是,则交换当前字节和下一个字节。继续循环,跳过当前的和下一个字节。