IO和数据结构

目录

day1 文件IO / 标准IO概念

1、系统调用

2、文件流指针的个数问题

3、赋值表达式的值

4、被open的文件不关闭的问题

5、对于标准IO,文件流指针的数量规则

6、条件判断表达式的问题

7、0在整形、字符型、指针的体现

8、动态顺序表和静态顺序表的区别

9、define和typedef 的区别

10、赫夫曼树

11、线索二叉树


day1 文件IO / 标准IO概念

1、系统调用

2、文件流指针的个数问题

每个文件流指针指向的结构体中都包含一个文件描述符,由此可知,它的数量限制的基础是文件描述符有数量限制

3、赋值表达式的值

赋值表达式的值等于 “=”右边的值

4、被open的文件不关闭的问题

5、对于标准IO,文件流指针的数量规则

6、条件判断表达式的问题

条件判断表达式中不能 有 变量定义语句

7、0在整形、字符型、指针的体现

整形:0

字符型:\0

指针:NULL

8、动态顺序表和静态顺序表的区别

动态顺序表是表结构体中包含顺序数组的首地址指针,数组如果不够用,就可以再申请一片更大的内存来存储更多的数据,只要把原来的数据拷贝到新数组中即可,我们的顺序表结构体不用做任何修改;

struct student

{

data_type *pdata;

int size; //数组存储容量

int count; //数组有效数据个数

}

静态顺序表是表结构体中直接包含数据的数组,数组如果不够用,就只能摧毁结构体,再重新建立结构体,这样会导致使用了该结构体的地方都得修改

struct student

{

data_type data[size];

int count;

}

9、define和typedef 的区别

我们在给已有数据类型起别名时,除了可以用typedef之外,也可以用define

比如:#define data_type int

区别主要是体现在类型安全性上

10、赫夫曼树

也可以用来压缩图片:

1、将图片的一个字节根据原始排列顺序转化为字符,此时存储的是大小相同的字符串;

2、然后将字符串编码为赫夫曼编码。从而实现数据的压缩

3、解压时,根据编码规则将赫夫曼编码解码为字符,恢复成大小相同的二进制图片;

11、线索二叉树

<think> 我们正在讨论的是以C#和.NET为基础的上位机测试系统的学习路线。用户特别强调了参考之前的回答结构,即分为阶段式学习路线。 根据之前的回答,我们分为4个阶段:基础筑基、工业协议与中阶开发、高阶架构与性能优化、专家级实战。 同时,用户提供的引用中,引用[1][2]是关于在线考试系统的设计与实现,引用[3][4]是关于C#测试和基础数据类型,这些都不是直接需求,但我们可以借鉴其中的一些技术点,例如: 引用[1][2]中提到的系统分析、数据库设计、功能设计(如试题管理、考试、评分)等,可以融入我们的学习路线中,因为测试系统上位机也可能包含类似的模块。 引用[3]提到模拟测试,引用[4]提到基础数据类型,这些都是基础内容。 因此,我们重新组织一个针对测试系统上位机的学习路线,仍然分为4个阶段,但更侧重于测试系统(可能包括自动化测试、数据采集、监控等)所需的知识。 注意:上位机测试系统通常包括硬件通信(如通过串口、网络等与待测设备通信)、数据采集、数据分析、测试报告生成等功能。 以下是具体路线: ### **阶段1:基础筑基(1-3个月)** 1. **C#与.NET框架核心** - 掌握C#基础语法(数据类型、流程控制、面向对象)[^4] - .NET框架基础:集合(`List<T>`, `Dictionary`)、文件操作、多线程(`Thread`, `Task`) - 异步编程:`async/await`模式(避免UI阻塞) - *实战项目*:控制台串口数据读取器(使用`System.IO.Ports`) 2. **测试系统基础概念** - 测试流程:测试用例设计、测试执行、结果收集与分析 - 常用通信协议:串口(RS232)、USB HID、TCP/UDP - 基础硬件交互:使用`SerialPort`类读取传感器数据(示例:`serialPort.ReadLine()`) 3. **简单界面开发** - WinForms基础:控件使用(按钮、文本框、图表) - 数据绑定:实时显示采集数据 --- ### **阶段2:测试系统核心开发(3-6个月)** 1. **通信协议深度应用** - 自定义二进制协议:结构体与字节流的转换(`BitConverter`,`MemoryStream`) - 工业标准协议:Modbus RTU/TCP(使用第三方库如NModbus) - 网络通信优化:`Socket`异步编程、心跳包机制 2. **测试逻辑与自动化** - 测试脚本引擎:使用`Roslyn`动态编译执行C#脚本 - 自动化测试框架:NUnit/xUnit测试用例编写与执行 - *实战项目*:自动化继电器开关测试系统(通过串口发送控制指令) 3. **数据存储与分析** - 数据库应用:SQLite本地存储测试记录(使用`System.Data.SQLite`) - 数据可视化:使用`ScottPlot`或`LiveCharts`绘制实时波形 - 报表生成:通过`NPOI`导出Excel测试报告 ```csharp // 示例:动态编译执行C#测试脚本 var script = CSharpScript.Create<int>("int a = 10; int b = 20; return a + b;"); var result = await script.RunAsync(); Console.WriteLine($"Test result: {result.ReturnValue}"); // 输出30 ``` --- ### **阶段3:高阶系统构建(6-12个月)** 1. **系统架构设计** - 插件化架构:`MEF`(Managed Extensibility Framework)动态加载测试模块 - 分布式测试:使用gRPC或WCF实现多机协同测试 - *实战案例*:构建多工位并行测试系统 2. **性能与可靠性** - 实时数据处理:环形缓冲区(`CircularBuffer<T>`)应对高吞吐量 - 异常恢复机制:看门狗定时器、断线重连策略 - 资源泄漏检测:使用`dotMemory`分析内存泄漏 3. **安全与合规** - 用户权限管理:RBAC角色模型(参考引用[1]中的帐号管理) - 数据加密:测试配置文件的AES加密存储 - 合规性要求:符合ISO 17025标准的测试记录审计 --- ### **阶段4:专家级扩展与实践(1年+)** 1. **智能测试系统** - 机器学习集成:使用ML.NET分析测试结果预测设备故障 - 机器视觉检测:集成OpenCV.NET进行产品外观自动化测试 2. **云边协同** - 边缘计算:在工业网关运行轻量级测试逻辑 - 云端大数据分析:通过Azure IoT Hub上传测试数据 3. **标准化与认证** - 测试标准落地:实现ISO 26262功能安全需求 - 文档自动化:根据代码生成测试文档(类似Swagger) --- ### **学习资源推荐** - 书籍:《C# in Depth》《实战Modbus》 - 开源项目: - [NModbus](https://github.com/NModbus/NModbus) - [ScottPlot](https://github.com/ScottPlot/ScottPlot) - 工具:Modbus Slave(协议模拟)、Postman(API测试) --- ### **避坑指南** ⚠️ 注意: 1. 避免在循环中频繁创建对象 → 使用对象池(`ObjectPool<T>`) 2. 跨线程访问UI控件 → 使用`Control.Invoke` 3. 测试数据完整性 → 添加CRC校验(如`Crc16.ComputeChecksum(bytes)`) --- §§ 相关问题 §§ 1. 如何设计可扩展的测试系统插件架构? 2. 测试系统中的实时数据可视化有哪些优化技巧? 3. 如何确保测试系统符合工业安全认证标准? 4. 有哪些适用于C#的开源机器学习库可用于测试数据分析? 5. 在分布式测试系统中如何保证时间同步精度? </think> 以下是针对**C#/.NET测试系统上位机**从入门到精通的专业学习路线,结合工业测试系统开发的核心需求,分为4个阶段并融合引用内容的技术要点: --- ### **阶段1:基础筑基(1-3个月)** #### 1. **C#与.NET核心** - **语法基础**:数据类型(`byte`, `Int32`, `float`等)[^4]、面向对象、异常处理 - **关键技能**: - 异步编程:`async/await`处理硬件阻塞操作 - 集合与泛型:`List<T>`, `Dictionary`管理测试数据 - *实战项目*:串口数据监控工具(使用`System.IO.Ports`) #### 2. **测试系统基础** - **通信协议**: - 串口通信:`SerialPort`类实现传感器数据采集 - TCP/UDP:`Socket`类构建网络化测试设备 - **数据解析**:二进制协议处理(`BitConverter`转换字节流) ```csharp // 示例:解析温度传感器数据 byte[] data = serialPort.ReadExisting(); float temperature = BitConverter.ToSingle(data, 0); ``` #### 3. **简单界面开发** - WinForms基础:按钮/图表控件绑定测试数据 - 数据持久化:SQLite存储测试记录[^2] --- ### **阶段2:测试系统核心开发(3-6个月)** | **技术方向** | **关键技术** | **实战项目** | |--------------------|---------------------------------------|-----------------------------| | **自动化测试框架** | NUnit/xUnit单元测试 | 硬件驱动API测试套件 | | **动态脚本引擎** | Roslyn动态编译执行测试脚本 | 用户自定义测试用例系统 | | **数据可视化** | ScottPlot/LiveCharts实时曲线绘制 | 多通道传感器波形监视器 | | **报表生成** | NPOI操作Excel生成测试报告[^2] | 自动化质检报告系统 | ```csharp // Roslyn动态执行测试脚本示例 var script = CSharpScript.Create<double>("return sensor.ReadVoltage() * 0.1;"); double result = await script.RunAsync(); ``` --- ### **阶段3:高阶系统架构(6-12个月)** #### 1. **分布式测试系统** - **消息队列**:RabbitMQ实现多设备协同测试 - **微服务化**:Docker部署测试服务(`docker run test-service`) - **通信优化**:Protocol Buffers替代JSON传输 #### 2. **可靠性工程** - **异常恢复**:看门狗机制自动重启崩溃服务[^3] - **资源管理**:`IDisposable`规范释放硬件资源 - **安全加固**: - 权限控制:RBAC管理测试权限[^1] - 数据加密:AES-256保护测试配置 #### 3. **性能优化** - 环形缓冲区:`CircularBuffer<T>`处理高速数据流 - 内存映射文件:`MemoryMappedFile`加速大数据存取 --- ### **阶段4:专家级实践(1年+)** 1. **智能测试系统** - 机器学习:ML.NET分析测试结果预测故障 - 机器视觉:OpenCV.NET集成外观检测 2. **工业标准集成** - 对接MES系统:通过`RESTful API`同步测试数据 - 符合ISO 13849功能安全认证 3. **云边协同** - 边缘计算:Azure IoT Edge部署本地预处理 - 数字孪生:Three.js构建3D测试环境监控 --- ### **学习资源** 1. **书籍**: - 《C# in Depth》 - Jon Skeet -.NET性能优化》 - Sasha Goldshtein 2. **开源项目**: - [NModbus](https://github.com/NModbus/NModbus) - 工业协议实现 - [OpenHardwareMonitor](https://github.com/openhardwaremonitor) - 硬件监控案例 3. **工具**: - Modbus Slave(协议模拟) - Postman(API测试) --- ### **避坑指南** ⚠️ **关键注意事项**: 1. **线程安全**:UI线程禁止直接操作硬件 → 使用`BackgroundWorker` 2. **资源泄漏**:`SerialPort`未关闭导致端口锁定 → `using`语句自动释放 3. **测试覆盖**:单元测试覆盖率需 >80% → 使用`Coverlet`统计[^3] 4. **协议兼容**:字节序问题(大端/小端) → `IPAddress.HostToNetworkOrder` ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值