我有一个输入字符串040204220442040004200404020602260246
,我想转换为0x04 0x02 0x04 0x22 0x04 0x42 0x04 0x00 0x04 0x20 0x04 0x40 0x02 0x06 0x02 0x26 0x02 0x46
,但以字节为单位。我想将这些字节写入串行端口。
port.Write(bytes, 0, bytes.Length);
我如何转换它?
您可以使用正则表达式来执行此操作:
var regex = new Regex(@"(\d{2})");
string aString = "040204220442040004200404020602260246";
string replaced = regex.Replace(aString, "x$1 ");
在Linq中:
string src = "040204220442040004200404020602260246";
string res = Enumerable.Range(0, src.Length)
.Where(i => i % 2 == 0)
.Aggregate<int, string, string>("", (s, i) => s + " 0x" + src.Substring(i, 2), (s) => s.Trim());
如果您想使用纯LINQ,则可以按照以下方式进行操作:>
data .Select((x,i) => (Index: i, Value: x)) .GroupBy(tuple => tuple.Index / 2, tuple => tuple.Value, (_,values) => "0x" + string.Join("",values)) .Select(x => Convert.ToByte(x, 16)) .ToArray();
如果您要一个可笑的单线。