C# C语言中的自定义字符串占位符#

C# C语言中的自定义字符串占位符#,c#,string,parsing,C#,String,Parsing,现在,我正在处理一个应用程序,该应用程序接收一系列字节并通过串行发送它们,但这有点麻烦,因为例如,我有这样一个场景: 我想通过串行发送两个具有特殊含义的字节,然后是两个浮点,然后是一个字符串: 00 01 02 3F 00 00 00 3F C0 00 00 4E 41 4D 45 其中:00 01 02具有特殊含义,则3F 00 00为0.5,3F C0 00为1.5,最后一个4E 41 4D 45为字符串名称 正如您所见,我需要手动进行转换,然后形成我想要发送的数据,但我想要的是创建一个占

现在,我正在处理一个应用程序,该应用程序接收一系列字节并通过串行发送它们,但这有点麻烦,因为例如,我有这样一个场景: 我想通过串行发送两个具有特殊含义的字节,然后是两个浮点,然后是一个字符串:

00 01 02 3F 00 00 00 3F C0 00 00 4E 41 4D 45
其中:
00 01 02
具有特殊含义,则
3F 00 00
为0.5,
3F C0 00
为1.5,最后一个
4E 41 4D 45
为字符串名称

正如您所见,我需要手动进行转换,然后形成我想要发送的数据,但我想要的是创建一个占位符类型的字符串格式化程序,用于自动转换此数据示例(作为字符串):
“00 01 02[0.5][1.5][NAME]”

因此,与其在文本框“00 01 02 3F 00 00 3F C0 00 00 4E 41 4D 45”中引入这个不太好的数据,我想引入这个数据字符串“00 01 02[0.5][1.5][NAME]”,然后解析器应该知道在满足方括号时转换为浮点或字符串

我在另一个项目中使用了一个函数,该函数将字符串中的“/”替换为特定数据,但我需要对其进行调整,也不确定这样做是否正确:

private string dataParser(string input)
{
    string s = input;
    string[] tokens = s.Split(new[] { "//" }, StringSplitOptions.None);
    StringBuilder sb = new StringBuilder();

    int counter = 0;
    for (int i = 0; i < tokens.Length; i++)
    {
        sb.Append(tokens[i]);
        if (i < tokens.Length - 1)
            sb.Append(hexfloatArray[counter++]);
    }

    return sb.ToString().Replace(" ", "");
}
私有字符串数据解析器(字符串输入)
{
字符串s=输入;
string[]tokens=s.Split(新的[]{”/“},StringSplitOptions.None);
StringBuilder sb=新的StringBuilder();
int计数器=0;
for(int i=0;i
您可以非常轻松地使用正则表达式将括号中的标记转换为不同的值

var value=“00 01 02[0.5][1.5][NAME]”;
//将[x.y]之类的内容替换为其字节字符串
value=Regex.Replace(值“\\[(\\d+\\.\\d+)”,(m)=>
{
//这是部分中的数字
var number=float.Parse(m.Groups[1].Value);
//根据本例中的数字将其编码为Ff+字节
字符串ret=“FF”;
foreach(位转换器中的变量x.GetBytes(数字))
{
ret+=“”+x.ToString(“x2”);
}
返回ret;
});
//将括号中的其他内容替换为字符串
value=Regex.Replace(值“\\[(.*?)”,(m)=>
{
//这是节中的字符串
var str=m.Groups[1]。值;
//在本例中,将其编码为FE+UTF8字节
字符串ret=“FE”;
foreach(编码中的varx.UTF8.GetBytes(str))
{
ret+=“”+x.ToString(“x2”);
}
返回ret;
});
控制台写入线(值);
//显示:00 01 02 FF 00 00 3f FF 00 c0 3f FE 4e 41 4d 45

这里的想法是找到不同的特殊情况,并将它们转换为lambda表达式中字符串中所期望的字节。我展示了一个简单的使用位转换器和UTF-8编码以及一个简单的单字节的例子,但是您需要更改为您需要的任何编码。

您如何知道
“[1.5]”“
是字符串还是数字?很好的一个,也许我需要更具体一点:“00 01 02[F:0.5][F:1.5][S:NAME]”非常好的方法,我刚刚将字符串公式修改为[“(.*?”],现在只考虑引号之间的单词。多谢各位!