将字符串转换为c#中的等效字节十六进制

问题描述 投票:0回答:3

我有一个输入字符串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);

我如何转换它?

c# .net string hex
3个回答
2
投票

您可以使用正则表达式来执行此操作:

var regex = new Regex(@"(\d{2})");

string aString = "040204220442040004200404020602260246";
string replaced = regex.Replace(aString, "x$1 ");

Fiddle


0
投票

在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());

0
投票

如果您想使用纯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();

如果您要一个可笑的单线。

© www.soinside.com 2019 - 2024. All rights reserved.