【发布时间】:2019-03-15 05:58:59
【问题描述】:
我正在为 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++ 上运行吗?
【问题讨论】:
-
"32,36 女巫是 26" 你的意思是你想用
3Y 3X替换3X 3Y(当 X,Y 是数字时)?31 32 33怎么样? -
目前还非常不清楚“我里面有 4 位数字(数字)”是什么意思。我看到以下数字:
26 32 36 20 20 70 70 73 20 20 29 39 31。您的 C# 正则表达式表明您只对以3开头的数字感兴趣。如果是这种情况,请在问题中说出来。 -
我需要找到所有数字。并替换它们 28--82 , 1234--4321 1957-7591 ,十六进制数字表示为 30-39
-
您的意思是 digits 表示为 30-39?请不要混淆“数字”和“数字”,真的很混乱。
-
顺便说一句,“字节数组”似乎并不是真正的字节数组(在某种意义上它包含
0x20、0x31等),而是一个空格-delimited string,其中每个“字节”是代表十六进制值的两位数字字符?这也让它变得非常不同。