c ++替换字节数组中的项顺序

时间:2018-10-10 10:35:29

标签: c++ arrays replace find

我正在为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 ++上运行吗?

1 个答案:

答案 0 :(得分:0)

逐个元素遍历数组,查找0x320x39。如果找到,请检查下一个字节(如果在范围内)以查看其分别与0x360x31相匹配。如果是,则交换当前字节和下一个字节。继续循环,跳过当前的下一个字节。