c++ - 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++ 上运行吗?
解决方案
循环遍历数组,逐个元素,寻找0x32
or 0x39
。如果找到,检查下一个字节(如果在界限内)以查看它是否匹配0x36
或0x31
(分别)。如果是,则交换当前字节和下一个字节。继续循环,跳过当前字节和下一个字节。
推荐阅读
- c# - Mac os 上的 Dotnet 高内存使用率
- windows - 如何使用 XAML 使用字符串资源设置 AppBarButton 文本
- node.js - 如何在 Node.JS 中获取 TargetingIdeaSelector 的 API(用于获取关键字搜索数据的 Google API)?
- arrays - 如何在单元格数组中创建循环并重塑矩阵
- c# - 将 Stream 参数与其他参数一起传递以通过 POST 方法调用 WCF 服务
- javascript - 一键打开两个网址
- python - 可以检测python是否执行了模块导入或尝试执行它?
- reactjs - 代表用户向 Google Calendar API 发出 AWS Lambda 请求(python)
- aws-lambda - DynamoDB 流式传输一些未发送到 lambda 的项目
- mongodb - MongoDB docker 停止运行,“/opt/mongors/keyfile 上的权限太开放”