这个业务逻辑表面上看起来是一个数据解析和结构化(打包成“簇”,即 C# 中的结构体或类)的过程

📅 2026/7/10 23:10:03
这个业务逻辑表面上看起来是一个数据解析和结构化(打包成“簇”,即 C# 中的结构体或类)的过程
这个业务逻辑表面上看起来是一个数据解析和结构化打包成“簇”即 C# 中的结构体或类的过程。不过在写代码之前我们需要先修正一个隐藏的小错误。 关键点修正关于“34-2”的截取在字符串截取中“34-2”通常指从索引 34 开始截取 2 个字符。但根据前面的逻辑规律这里大概率是一个连续按位置截取的协议0-2前2个字符2-32接下来的30个字符如果接下来的截取是从索引 32 开始长度为 2那么范围应该是32-2即第 32、33 位。如果是从 34 开始中间就会漏掉 2 个字符。为了保证代码的健壮性我在下面提供的代码中会严格按照你给出的“索引 34长度 2”来编写但同时做好了越界保护。如果你的协议实际上是连续的你只需要把代码里的34改成32即可。️ C# 完整实现代码在 C# 中通常使用struct结构体或class类来对应 LabVIEW 中的“簇Cluster”。以下是完整的控制台应用程序代码usingSystem;usingSystem.Globalization;namespaceStringParserApp{// 定义“簇”Cluster对应的结构体用于捆绑数据publicstructDataCluster{publicintFirstValue;// 对应截取 0-2 转换的数值 (例如 13911)publicdoubleSecondValue;// 对应截取 2-32 转换的双精度浮点数 / 10publicintThirdValue;// 对应截取 34-2 转换的数值}classProgram{staticvoidMain(string[]args){// 模拟一条符合你描述的原始字符串总长度至少需要 36 位避免截取越界// 0-2位: 13 - 转数值根据你的描述这里可能是某种特定编码或进制或者是举例。我们先按标准的常规转换处理// 2-32位: 911...stringinputString1391100000000000000000000000000012345;Console.WriteLine($原始字符串:{inputString});Console.WriteLine($字符串总长度:{inputString.Length});Console.WriteLine(--------------------------------------------------);try{// 解析数据并捆绑到簇DataClustermyClusterParseStringToCluster(inputString);// 输出解析结果Console.WriteLine(解析成功“簇”内部数据如下);Console.WriteLine($1. 字段一 (0-2) :{myCluster.FirstValue});Console.WriteLine($2. 字段二 (2-32) :{myCluster.SecondValue});Console.WriteLine($3. 字段三 (34-2) :{myCluster.ThirdValue});}catch(Exceptionex){Console.WriteLine($解析过程中发生错误:{ex.Message});}Console.ReadLine();}/// summary/// 解析字符串并捆绑到簇的核心方法/// /summarypublicstaticDataClusterParseStringToCluster(stringsrc){// 安全检查确保字符串长度足够防止 Substring 抛出越界异常if(string.IsNullOrEmpty(src)||src.Length36){thrownewArgumentException(输入字符串长度不足无法解析。);}DataClusterclusternewDataCluster();// 1. 字符串截取 0-2 (从索引0开始截取2个字符)// 提示如果 13 要变成 13911这可能涉及特定的业务算法这里演示标准转换stringpart1src.Substring(0,2);if(int.TryParse(part1,outintval1)){cluster.FirstValueval1;// 如果你的逻辑是固定让它等于 13911取消下一行的注释// cluster.FirstValue 13911;}// 2. 字符串截取 2-32 (从索引2开始截取30个字符)// 转成双精度浮点数 / 10stringpart2src.Substring(2,30);if(double.TryParse(part2,NumberStyles.Any,CultureInfo.InvariantCulture,outdoubleval2)){cluster.SecondValueval2/10.0;}else{cluster.SecondValue0.0;// 转换失败的默认值}// 3. 字符串截取 34-2 (从索引34开始截取2个字符)// 转成数值型stringpart3src.Substring(34,2);if(int.TryParse(part3,outintval3)){cluster.ThirdValueval3;}// 返回捆绑好数据的“簇”returncluster;}}} 代码要点解析针对 LabVIEW 转 C# 的同学Substring(start, length): C# 的截取函数第二个参数是长度Length而不是结束符号的索引。所以Substring(2, 30)代表从第 2 位开始往后数 30 个字符即占满了第 2 到第 31 位。double.TryParse: 在处理长浮点数字符串时使用TryParse可以防止因为字符串中包含非数字字符而导致程序直接崩溃。添加CultureInfo.InvariantCulture可以避免因为电脑系统语言不同例如某些欧洲国家用逗号,代替小数点.导致的解析错误。关于 13911: 如果你的前两个字符13必须直接映射到13911请检查框图中是否有一个Map映射或者Switch条件分支控件。如果没有直接给cluster.FirstValue 13911;赋值即可。