将字符串阵列转换为特定字符之间的字符



我正在尝试找到一种转换字符串(输入文本框(并将其转换为字节数组以发送串行端口/套接字的方法。

我可以将字符串转换为字节[]零件,但在替换中有点挣扎

本质上,GUI允许用户确定发送响应的格式,我正在研究以下内容: -

用户输入:[2]测试{1} {2} [3]

{1}和{2}是可变量字段,可以从传入的消息中提取,因此目前正在替换它们而没有问题。

我要实现的是用stx字符替换[2],而[3]用etx字符替换为2和3是其assii等效物。www.asciable.com

用户可以以这种格式输入任何有效的ASCII字符,因此[13]对于CR等

循环循环的最佳方法是否会记住[然后]的索引并在这两个索引之间抓住所有字符?还是有更有效的方法?

谢谢,

丹尼尔。

正则表达式可以在括号之间找到数字,并用计算的值替换它们。您的替换方案看起来可能与string.format相似,但是您必须比较它并决定特殊字符的操作顺序和含义。

如果包围的数字在0-127之外,则编码将抛出异常。如果需要的话,您可能会有其他行为。

var encoding = Encoding.GetEncoding(Encoding.ASCII.CodePage, 
    EncoderFallback.ExceptionFallback, 
    DecoderFallback.ExceptionFallback);
var bracketRegex = new Regex(@"[(?<digits>d+)]", RegexOptions.Compiled);
MatchEvaluator convertToCodepoint = (match) => 
    Char.ConvertFromUtf32(Int32.Parse(match.Groups["digits"].Value));
var values = new[] {"a", "b", "c" };
var input = "[2] Test {1} {2} [3]";
encoding.GetBytes(String.Format(bracketRegex.Replace(input, convertToCodepoint), values))
    .Dump();

我认为您应该写一个与此类似的代码:

string input = TextBox.text; "User name (sales)";
//Use those lines if you don't know how many times do you have to iterate.
var totalOfBraces = input.Where(x => x == '{').Count();
var totalOfBrackets = input.Where(x => x == '[').Count();
var totalOfElements = totalOfBraces + totalOfBrackets;
string output = input.Split('[', ']')[1];
string output = input.Split('{', '}')[1];

,您可以在支括号和支架之间获得元素并进行替换。

那么,为什么我添加totalOfElements,有可能执行for bucle

例如:

var counterOfBraces = 0;
var counterOfBrackets = 0;
for(var i=0; i<totalOfElements.Count(); i++){
    if(i < totalOfBrackets){
        counterOfBrackets+=1;
        var textToFind = "[" + index + "]";
        input = input.Replace(textToFind, "some new text");
    } else {
        //Do the same for braces
    }
}
//NOW HERE, YOU HAVE YOUR TEXT FORMATED AND READY TO CONVERT IT TO BYTE[]

最新更新