首页 > 解决方案 > c ++替换字节数组中的项目顺序

问题描述

我正在为 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 是 ascii 代码中的数字 2

HEX 0x35 是 ascii 代码中的数字 5

HEX 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 overflow 用户的帮助下:-)):

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++ 上运行吗?

标签: c++arraysreplacefind

解决方案


循环遍历数组,逐个元素,寻找0x32or 0x39。如果找到,检查下一个字节(如果在界限内)以查看它是否匹配0x360x31(分别)。如果是,则交换当前字节和下一个字节。继续循环,跳过当前字节下一个字节。


推荐阅读