自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 C#中JSON字符串和Dictionary字典类型的相互转换

借助NuGet 程序包添加json库文件,添加引用 using Newtonsoft.Json;

2024-06-27 16:07:50 93

原创 C# 一个串口通信的案例实现

Reader:R // 读取失败Reader:R12345678// 读取成功Example:Reader:0A 52 30 31 32 33 34 35 59 54 0D 0A // 成功Reader:0A 52 46 41 49 4C 0D 0A // 失败RPP1R12345678RFAIL。

2024-06-18 14:46:42 420

原创 C++关于拷贝构造函数的一些理解

拷贝构造函数通常以引用的方式接受同类型的对象作为参数,以完成对象的拷贝。程序中如果没有定义拷贝构造函数系统会生成一个默认的拷贝构造函数,它会将作为初始值的对象的数据成员的值都拷贝到要初始化的对象中。注意:拷贝构造函数的形参通常建议使用引用类型,如果不使用引用类型,而是传递对象本身,会导致在函数调用时发生对象的拷贝,这样就会调用拷贝构造函数本身,导致无限循环。编译器在执行B=fun2()时会创建一个临时的无名对象,在执行return A 时实际上是调用了拷贝构造函数将A 的值拷贝到。的属性值也被修改了。

2024-06-05 13:25:24 576

原创 C++函数模版和C#的泛型函数的区别

函数模板和C#的泛型函数在概念上是非常相似的,都是用于创建能够处理多种数据类型的通用函数。是类型参数的占位符。而在 C# 中,泛型函数使用。等形式来声明泛型参数。

2024-06-02 17:26:45 405

原创 C++ 变量的声明和初始化方式

在大多数情况下,这三种初始化方式都可以使用,并且它们在结果上是等效的。然而,列表初始化在某些情况下会更加严格,并且在使用窄化转换时会进行检查,这使得它在某些情况下更加安全。但在 C++ 中,直接初始化和复制初始化之间有一些微妙的区别。通常,直接初始化更加高效并且可以用于更多的情况,因为它在声明的同时就执行了初始化操作。,这也会导致窄化转换,但是列表初始化对窄化转换进行了检查,因此会导致编译错误。这是 C++11 引入的一种新的初始化方式,也被称为初始化列表。这是一种传统的初始化方式,称为复制初始化。

2024-06-02 15:52:09 421

原创 C#中的值类型与引用类型

这些值类型在C#中通常被用来存储简单的数据,它们的实例直接包含其数据的副本,而不是引用到实际数据的地址。在C#中,值类型是一种数据类型,它们直接包含它们的数据,并存储在栈上或内联在其他对象中。与引用类型不同,值类型的实例直接包含其数据的副本,而不是引用到实际数据的地址。在C#中,结构体是一种值类型,它们的实例直接包含其数据的副本,而不是引用到实际数据的地址。这些引用类型在C#中都是通过引用在内存中进行管理的,它们的实例是存储在堆内存中的,并通过引用来访问和操作。:是一种类型安全的函数指针,用于引用方法。

2024-06-02 10:37:39 540 1

原创 C++联合体用法

联合体(union)在 C++ 中是一种特殊的数据结构,它允许在相同的内存位置存储不同的数据类型,联合体的大小等于其中最大成员的大小。联合体的大小通常等于其中最大成员的大小,这可能导致内存浪费。在使用联合体时,要注意对齐问题,特别是在处理跨平台或者对内存大小敏感的情况下。因为联合体共用内存,所以a.u.x占用的内存里的4被后来的a.k覆盖了,变成了0;联合体的所有成员共享同一块内存,因此对一个成员的修改会影响到其他成员。这可能导致意外的行为,特别是当不同成员的类型大小不同时。来访问联合体的成员。

2024-06-01 15:25:40 397

原创 C++操纵符用法

C++中的操纵符(Manipulators)是用于格式化输入输出的特殊工具。它们可以在输出流中控制各种格式,如设置字段宽度、精度、填充字符等。: 控制输出的对齐方式,分别为左对齐、右对齐和在填充字符之间对齐。: 控制bool类型的输出,以字符串形式输出true或false。这些操纵符可以单独使用,也可以组合使用以实现更复杂的格式化需求。: 控制浮点数的输出格式,分别为定点表示和科学计数法表示。: 在浮点数的输出中始终显示小数点。: 设置浮点数的精度为n位小数。: 设置填充字符为c。

2024-06-01 11:20:09 277

原创 C++位运算

右移操作会在左侧添加指定数量的零或符号位,并且可能导致右侧的位丢失。位移是一种常见的位操作,用于将二进制数字向左或向右移动指定数量的位。在 C++ 中,对于左移操作,如果移动的位数超过了数据类型的位数,则会对移动的位数取模,即取余数。符号位的翻转:对于符号位的翻转,可以使用按位异或操作来实现。按位与(AND)是一种位操作,用于将两个二进制数字的相应位进行逻辑与操作。按位或(OR)是一种位操作,用于将两个二进制数字的相应位进行逻辑或操作。按位异或(XOR)是一种位操作,用于比较两个二进制数字的相应位。

2024-06-01 09:58:02 645

原创 机器字长与操作系统的关系

因此,如果你的计算机是64位处理器,你可以选择安装32位或64位的Windows操作系统,但不能安装64位操作系统于32位处理器上。因此,随着技术的进步,许多现代计算机都采用了64位处理器和64位操作系统,以提供更好的性能和更大的内存支持。64位处理器可以更高效地处理更大的数据集和更多的内存,因此通常用于64位操作系统,如Windows的64位版本。总的来说,如果你的计算机硬件支持64位系统,并且你需要更好的性能、更大的内存支持和更好的未来扩展性,那么64位系统通常是更好的选择。

2024-05-31 13:36:55 445

原创 为什么16进制普遍应用在计算机领域

现在的16进制则普遍应用在计算机领域,这是因为将4个比特(4位)转换成单独的十六进制数字相对容易,这是因为十六进制系统是基于二进制系统的。在二进制系统中,每一位都只有两种可能的状态,0或1,而在十六进制系统中,每个数字可以表示4位二进制数。这些RGB值也可以以16进制表示,例如,红色的RGB值是(255, 0, 0),可以表示为 #FF0000。在计算机中,内存地址通常以16进制表示。总的来说,16进制在计算机领域中的应用十分广泛,它提供了一种简洁、易于理解和转换的方式来表示二进制数据。

2024-05-31 09:50:47 567

原创 MFC学习日记-AfxMessageBox和MessageBox区别

AfxMessageBox()函数在任何类里边都可以使用,而MessageBox()函数只能在CWnd类的继承类中使用。另外,AfxMessageBox()函数的参数没有MessageBox()函数的参数丰富,所以后者较前者灵活。MessageBox()是Win32API函数.后者是mfc中的全局函数.在MFC中能用MessageBox()的地方都能用AfxMessageBox().。在第一种形式中,lpszText表示在消息框内部显示的文本,消息框的标题为应用程序的可执行文件名(如Hello)。

2024-05-30 14:49:34 1167

原创 C# 字节数组(byte[])拼接的性能对比测试

【代码】C# 字节数组(byte[])拼接的性能对比测试。

2024-05-27 09:06:44 380

原创 Halcon之光度立体法

要保证好的图像质量,首先要确保相机采集的图像具有线性特征,可以使用算子radiometric_self_calibration确认相机特性,如果相机采集的图像是非线性的,可以利用算子 lut_trans 矫正灰度信息。但对于一些特殊的产品,因为阴影的原因,三个方向打光不能很好的表征缺陷特征,造成重建的图像特征不明显,这个时候就需要在原来基础上增加打光方向,避免死角。这个角度是以图像为准的,比如光从图像右侧打过来,角度就是0°,从上面打过来,角度是90°,从左面打过来,角度是180°,下边打过来是270°。

2024-05-23 16:52:43 1106

原创 C# log4net- 使用教程

用户可以从http://logging.apache.org/log4net/下载log4net的源代码。解压软件包后,在解压的src目录下将log4net.sln载入Visual Studio .NET,编译后可以得到log4net.dll。右击项目新建一个config类型文件,取名为log4net (log4net 的配置信息单独的写在一个config文件里比较好管理,与其他代码分离清楚)Log4net就是为这样一个目的设计的,用于.NET开发环境的日志记录包。3. Log4net的结构。

2024-05-17 11:46:07 564

原创 C# 单例模式及其应用

这样可以确保只有一个缓存管理器实例被创建,所有的数据都可以通过该实例进行缓存和访问,避免了多个缓存实例导致的数据冗余和一致性问题。使用单例模式可以确保只有一个日志记录器实例存在,所有的模块都可以通过该实例将日志信息写入到同一个日志文件中,避免了多个日志实例导致的日志信息分散和不一致的问题。:在应用程序中,可能会有大量的任务需要并发执行,为了提高性能和资源利用率,可以使用单例模式来实现线程池。这样可以确保只有一个线程池实例被创建,所有的任务都可以提交到该实例中进行并发执行,避免了频繁创建和销毁线程的开销。

2024-04-28 17:13:31 1005 2

原创 C# 使MessageBox.Show弹出框保持最前

【代码】C# 使MessageBox.Show弹出框保持最前。

2024-04-28 15:24:23 793

原创 OCX文件注册方法

按照上面的方法步骤进行操作,.ocx格式控件文件就可以注册加载成功,也不会出现Dllregisterserver调用失败,出现0x8002801c的错误了。遇到这个问题的朋友快去试试吧。1、根据自己电脑系统的位数将这个控件放入不同的文件夹内,32位系统的放入C:\Windows\System32文件夹内,64位系统的放入C:\Windows\SysWOW64文件夹内。2、以管理员的身份运行cmd.exe,Win10系统可以在左下角搜索栏搜索cmd.exe,然后右键点击该结果,选择“以管理员身份运行”;

2024-04-28 14:47:58 722

原创 关于读取PLC寄存器数据的一些理解

单次读取和分100次单独读取之间的时间差异可能还取决于您的读取代码的实现。例如,如果您的代码在分100次读取时进行了100次独立的通信请求,而没有使用并行或批量处理,那么时间差异可能会更大。在一次读取中,网络延迟只会发生一次,而在100次单独读取中,每次读取都会受到网络延迟的影响。如果您的应用需要实时监控和响应PLC数据的变化,那么可能需要更频繁地读取数据,以确保及时获取最新的数据。如果您的通信通道带宽有限或受网络延迟影响,那么可能需要调整较大的数据量和较低的读取频率,以减少通信开销和响应时间。

2024-04-28 09:12:14 267

原创 C#虚方法的使用场景

通过使用虚方法,您可以在派生类中重写基类中定义的方法,从而实现不同对象在相同方法调用时表现出不同的行为。您可以在基类中定义一个虚方法来处理控件的绘制逻辑,然后在每个具体的控件派生类中重写该方法以适应特定的绘制需求。您可以创建一个基类来处理数据库连接和一般的数据访问逻辑,然后在具体的数据访问对象派生类中重写虚方法以执行特定的数据库操作。您可以使用虚方法来定义基类中的角色动作,然后在具体的角色类中重写这些方法以实现特定的动作。通过虚方法,您可以实现基类的通用功能,并通过派生类的重写来定制特定类型的行为。

2024-04-26 17:31:54 538 3

原创 C# 打开另一个程序并将其吸附到已经创建好的空窗体中

函数将其窗口句柄(handle)设置为您的窗体的子窗口。要在C#中打开另一个程序并将其吸附到已经创建好的空窗体中,您可以使用。类来启动另一个程序,并使用。

2024-04-26 16:36:42 296 1

原创 各种编码详解

已知“严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

2024-04-26 12:20:58 733 1

原创 C#修改电脑IP信息帮助类

【代码】修改电脑IP信息帮助类。

2024-04-25 14:06:21 624 1

原创 软件开机自启动的方法

然后根据需要设置为所有用户还是指定用户,包括任务启动的延迟时间(比如相机启动时间较长,但是软件启动时间断,软件启动后可能会出现相机掉线的情况,所以可以设置一定的延迟时间,等相机启动后软件再自动开启)。、win8的系统,在系统的开始菜单里,有个“启动”文件夹,打开启动文件夹后,只需把要开机自启动的程序的快捷方式放入该文件夹,系统登录成功后就会自动打开设置的软件。鼠标右键点击计算机,选择管理选项,进入计算机管理,在任务计划程序窗口,创建任务,输入任务名称。设置完成后,可以在任务管理器启动中,查看是否设置成功。

2024-04-25 13:49:27 476 1

原创 C# WinForm多线程修改控件,在窗体未创建或关闭时报错

百度之后,发现需要判断控件的IsHandleCreated和IsDisposed等属性,并且如果还有错误,可以再捕获InvalidOperationException异常,避免程序崩溃,每次涉及到UI变动的地方都这么判断的话,则太麻烦。WinForm多线程修改控件时,提示在“创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke”报错信息,并且如果没有捕获到,则可能导致程序崩溃,直接关闭。

2024-03-27 09:24:00 266

原创 C#实现调试软件通过网线连接修改控制器的IP设定

思路:双方定义一个共同的通信端口,调试软件定义为发送端,通过广播的方式发送指令,看门狗定义为接收端,接收发送端发来的命令,为保证数据的完整性我们需要定义一下报文格式,我使用的是CRC16_IBM效验。调试软件与看门狗软件通过UDP通信实现互相身份识别验证,解析指令执行修改本地IP信息,修改完成后双方地址信息都知道了,这样就可以建立TCP通信了。项目要求:实现看门狗软件与外部调试软件在不知道对方信息的状态下建立可靠的通信。CRC效验静态库方法(nuget安装包,搜索“

2024-03-25 15:01:06 412

原创 C#定时执行一次任务

项目中有个需求缓存垃圾清理,不想用timer一直刷新读取判断是否执行,我想要在每天定时执行一次任务。

2024-03-13 15:47:07 937 1

原创 c#闭包问题

而在第二个正确的例子里,在每一次循环中,会创建一个新的临时变量u来保存当前循环的i,当委托或Lambda创建时,闭包这个新的临时变量u,且每个不同委托引用的u是互相独立的,其到委托执行时都是不会变化的,所以使用临时变量来保存匿名函数想要引用的外部函数变量可以解决闭包陷阱。“foreach”的遍历中定义的临时循环变量会被逻辑上限制在循环内,“foreach”的每次循环都会是循环变量的一个拷贝,这样闭包就看起来关闭了(没有了)。在c#中,内层的函数可以引用包含在它外层的函数的变量,即使外层函数的执行已经终止。

2024-03-12 13:08:31 1065 1

原创 C#泛型委托理解(Deleagte与Action、Func用法)

关键字到匿名委托方法,再到Action和Func,Action是无返回值的委托,Func是有返回值的委托,现在基本上都是基于Action和Func来写委托的,有些和业务逻辑连接起来写匿名委托方法。Func(有返回值)------T1和T2为0-16个参数类型,T3为返回值类型。其实C#已经帮我们封装好了泛型委托,无返回值泛型委托Action,有返回值泛型委托Func。Func(有返回值)------T1为0-16个参数类型,T2为返回值类型。//声明泛型委托,有返回值从。

2024-03-11 17:25:31 948 1

原创 使用MX Component三菱自带网口与上位机通讯设置方法

查看刚刚设置的Wizard,打开【Communition Setup Utility】,切换至【List view】,【Display】切换至【Program】模式,查看参数。打开三菱mx安装目录下的文件,路径为//ACT//Samples//Vcs.net//Sample2010,读写数据需要在编程模式下才可以使用,点击【OPEN】,修改代码参数。10.切换至【Connection Test】,点击【Test】,成功!4.设置pc端,本次使用Q10Udehcpu自带网口,端脑端使用网卡,tcp协议。

2024-03-11 13:08:57 846 1

原创 C#后台无窗体程序实现

由于项目要求做一个C#窗体隐藏后台计算程序并唯一,找到两种方法实现后台应用程序,下面讲讲怎么实现。

2024-03-11 10:28:09 509 1

原创 C# UDP实现远程主机与本地主机两台设备间广播通信

在使用TCP/IP 协议的网络中,主机号为全1的IP地址为广播地址。两者的区别就是,本地广播在不知道目标主机的网络地址下,如果目标主机是在本地网络,可以发送本地广播,本地网络下的所有主机都能接收广播。直接广播是目标主机的网络地址知道,那该网络地址网段下的所有主机都能收到广播,直接广播更精确范围更小些。地址就是255.255.255.255,它不经路由转发,发送本地网络下的所有主机,只能在局域网内转发,主要是不用知道目标主机的掩码与网络地址,本地转发同本地网络下的所有主机。掩码最后为0的位为主机位。

2024-03-11 10:15:24 1120 1

原创 C#程序以管理员权限运行

【代码】C#程序以管理员权限运行。

2024-03-07 11:03:55 854 1

原创 C# Nuget上一个轻量级TCP\IP通讯库(SimpleTCP)

工作中经常遇到需要实现TCP客户端或服务端的时候,如果每次都自己写会很麻烦且无聊,使用SuperSocket库又太大了。这时候就可以使用。

2024-03-06 12:58:59 1482

原创 C# lambda表达式及匿名方法

Console.WriteLine("通过委托调用方法:a+b={0}", a + b);Console.WriteLine($"通过匿名方法:a+b={a + b}");//匿名方法概念:这个方法没有具体名称,只有委托关键字,方法参数,方法体,所以称为匿名方法。匿名方法概念:这个方法没有具体名称,只有委托关键字,方法参数,方法体,所以称为匿名方法。//通过Lambda表达式,Lambda表达式就是将匿名方法进一步封装,Lambda表达式:就是将匿名方法进一步封装,基本定义规范:(参数)=>{方法体}

2024-03-05 14:09:54 366

原创 SECS GEM 常用指令概略

功 能 信息 → ← 名称 功能概略 支 持 动作概要 StreamX             SxF0 B 中止处理 事务中止处理 ○ 任意信息都能返回中止 Stream1   装置的状态           S1F0 B 中止处理 事务中止处理

2024-03-05 13:08:51 910

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除