当前位置: 首页 > news >正文

这个业务逻辑表面上看起来是一个数据解析和结构化(打包成“簇”,即 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..."stringinputString="1391100000000000000000000000000012345";Console.WriteLine($"原始字符串:{inputString}");Console.WriteLine($"字符串总长度:{inputString.Length}");Console.WriteLine("--------------------------------------------------");try{// 解析数据并捆绑到簇DataClustermyCluster=ParseStringToCluster(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>/// 解析字符串并捆绑到簇的核心方法/// </summary>publicstaticDataClusterParseStringToCluster(stringsrc){// 安全检查:确保字符串长度足够,防止 Substring 抛出越界异常if(string.IsNullOrEmpty(src)||src.Length<36){thrownewArgumentException("输入字符串长度不足,无法解析。");}DataClustercluster=newDataCluster();// 1. 字符串截取 0-2 (从索引0开始,截取2个字符)// 💡 提示:如果 "13" 要变成 13911,这可能涉及特定的业务算法,这里演示标准转换stringpart1=src.Substring(0,2);if(int.TryParse(part1,outintval1)){cluster.FirstValue=val1;// 如果你的逻辑是固定让它等于 13911,取消下一行的注释:// cluster.FirstValue = 13911;}// 2. 字符串截取 2-32 (从索引2开始,截取30个字符)// 转成双精度浮点数 / 10stringpart2=src.Substring(2,30);if(double.TryParse(part2,NumberStyles.Any,CultureInfo.InvariantCulture,outdoubleval2)){cluster.SecondValue=val2/10.0;}else{cluster.SecondValue=0.0;// 转换失败的默认值}// 3. 字符串截取 34-2 (从索引34开始,截取2个字符)// 转成数值型stringpart3=src.Substring(34,2);if(int.TryParse(part3,outintval3)){cluster.ThirdValue=val3;}// 返回捆绑好数据的“簇”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;赋值即可。
http://www.jsqmd.com/news/1163800/

相关文章:

  • Axure动态滑块进度器设计指南:打造高效交互体验
  • 2026六安市金安区生日宴特色实测|5家热门门店 - 资讯纵览
  • Bun又用Rust重写:借助AI对抗工作流11天改写50万行
  • 可白嫖源码---课程设计--毕业设计--springboot基于王者荣耀比赛校园选拔赛平台[编号:project23417] (案例分析)
  • 大模型流式对话界面:从 SSE 管道到打字机渲染的前端架构设计
  • AI 驱动的组件文档生成:从 JSDoc 注释到完整 Storybook 示例的自动化
  • 【2013-11-18】Android应用开发笔记:tabhost的两种实现方式
  • 无货源自动下单安全吗?新手先确认这 5 件事,抖掌柜密文履约更合规 - 抖掌柜
  • 2026年拓客软件排行榜TOP10:功能、价格、适用人群全解析 - 米諾
  • UVa 641 Do the Untwist
  • 【2013-11-18】Android应用开发笔记:swipelistview介绍
  • 文心输出的内容粘贴有符号好烦不用愁,AI 导出鸭轻松规整格式
  • 为了让代码极具可读性、结构清晰,并且彻底摆脱各种复杂的底层字符编码,我们应该引入 C# 现代开发中最推崇的面向对象与表现力原则
  • 2026湖北真空武昌鱼货源新选择:荆味、樊口厂家产地直供详解
  • 2026 年 7 月苏州吴中特色餐饮店测评:地道江南风味探店指南 - 资讯纵览
  • 终极指南:如何免费重置JetBrains IDE试用期,轻松获得无限30天使用权限
  • APScheduler 是什么?
  • AI 能记住了,但能自己干活吗?——看懂执行系统,你就知道它怎么完成复杂任务
  • 2026年7月最新福州宝珀官方售后客服电话及服务网点地址查询 - 宝珀官方售后服务中心
  • AI供稿不要急躁,不然拿不到稿费
  • 生产事故复盘模板:从 Timeline 到 Action Item 的结构化方法
  • 2026长春朝阳区管道疏通测评|正规马桶下水道疏通、化粪池清理、管道改造、首饰打捞靠谱推荐(春城到家实测避坑) - 资讯纵览
  • Service Mesh 落地实战:Istio 从入门到生产,流量治理全解析
  • 【2013-11-10】Android应用开发笔记:分享至微博及友盟的基本使用
  • 计网物理层基本概念
  • 第一章Netty,transferTo和transferFrom区别
  • Codex 回答很长时,哪些内容可以先跳过,哪些一定要看
  • 操作系统文件系统与日志结构合并树
  • Openclaw本地部署指南:Node.js 20+环境搭建与Skill开发实战
  • 2026年7月最新积家南京建邺万达广场维修保养服务电话 - 积家官方售后服务中心