C++
小乌鱼
java信创jrt coder
展开
-
C#调C++库返回字符串
C#调C++动态库返回字符串原创 2023-02-23 17:54:12 · 1604 阅读 · 2 评论 -
寄存器蜂鸣器
stm32蜂鸣器原创 2022-03-26 19:30:41 · 1014 阅读 · 0 评论 -
寄存器跑马灯
之前看的库函数操作的LED灯,和平常调用读卡器无异。这次读下芯片文档,用空工程模板操作寄存器控制LED灯。第一次接触寄存器操作,有点烧脑,烧脑过后感觉比库函数操作还清晰些。APB2ENR,CRL,ODR寄存器,很巧妙,也很符合物理常识。我这个是STM32 Nano开发板首先查LED对应的引脚,LED对应的是PC0-PC7,即GPIO的0-7引脚然后查外设时钟寄存器,GPIOC对应的是APB2ENR的第4位,把这个位置设置为1即开启了GPIOC的时钟。然后查CRL寄存器文档(端口配置寄存器),原创 2022-03-25 22:18:45 · 1787 阅读 · 0 评论 -
STM32第一个跑马灯
这是用STM32跑起来的第一个跑马灯程序。先安装好MDK5和相应驱动。然后设置Keil的调整设置。按下图设置设置好之后可以测试正点原子的默认跑马灯程序,先编译通过再下载默认程序只调动两个等闪烁,改程序为调动8个灯闪烁#include "sys.h"#include "delay.h"#include "usart.h"#include "led.h"/*下面主函数是使用HAL库函数实现控制IO口输出*/int main(void){ HAL_Init();原创 2022-03-22 21:18:00 · 1146 阅读 · 0 评论 -
C++之$find和$contian
对字符串的常用操作有从指定位置找特定子串位置。还有判断字符串是否包含字串。这次包装find和find和find和contian方法如下。并修复了发现的之前函数的bug。头文件#pragma onece#include <iostream>#include <cstring>#include <vector>using namespace std;///用C++实现M常用操作字符串方法$改doler///判断字符串里是否包含字串///source:源串原创 2022-03-16 20:33:56 · 1222 阅读 · 0 评论 -
C++之dolersplit和dolerl
在很多情况要把字符串按指定字符串分割得到分割的字符串数组或者长度。C#时候的split方法都是支持按字符分割的,我每次都是把字符串替换为不可见字符再split的。这次参照M和C#包装dolersplit和dolerl方法。来把字符串分割成向量,和取字符串按特定字符分割的长度。头文件#pragma onece#include <iostream>#include <cstring>#include <vector>using namespace std;//原创 2022-03-14 20:23:41 · 957 阅读 · 0 评论 -
C++之dolerp($p)
M的字符串操作函数是为见过的最简单的。$p就是按指定分割符和位置取字串,非常方便。类似下面:s str="张三^29岁^男^433127199101211234"s name=$p(str,"^",1)s age=$p(str,"^",2)s sex=$p(str,"^",3)为了方便的使用C++操作字符串按此习惯包装系列M操作字符串接口头文件#pragma onece#include <iostream>#include <cstring>using nam原创 2022-03-13 21:41:52 · 945 阅读 · 0 评论 -
神思通用100型读身份证
之前为了能做硬件操作学习了C++,一直停留在试验截断。由于之前项目都是HIS做好读卡对接了,就直接C#调HIS的dll了,一直没实际用C++对接过读卡器。这次终于有了个读卡机会,还有厂商配合,哈哈。采用C++包装读卡操作为一个读卡方法如下://检验读身份证包装#include <iostream>#include "windows.h"using namespace std;//读身份证对外函数extern "C" __declspec(dllexport) const char原创 2022-03-11 15:16:07 · 1299 阅读 · 0 评论 -
Asp.DotNetCore在CentOS绘制中文丢失问题
DotNetCore在CentOS绘制中文丢失问题原创 2021-12-15 17:35:06 · 1382 阅读 · 0 评论 -
编译原理二
前一篇实现了简单的加法虚拟机和加法编译器。这篇把虚拟机由加法虚拟机扩展为cal的计算虚拟机,栈虚拟机命令支持push、add、sub、multi、div(压栈、加、减、乘、除)。编译器也由单一的加法扩展到加、减、乘、除和括号指定优先级的运算表达式。由于代码的表达式采用日常的中缀表达式,即运算符位于运算数中间,这种模式编译人阅读,不利于计算机处理。先用方法把中缀表达式转换为等价的后缀表达式(逆波兰表达式)。然后对逆波兰表达式生成栈操作机器码。完成计算表达式到计算虚拟机的代码编译。cal虚拟机-基于栈实现约原创 2021-12-12 15:03:28 · 581 阅读 · 0 评论 -
初识编译原理
皇家药学院的信管专业毕竟不是专门的计算机专业。WEB的课程也是基本等于没有,没有开设编译原理课程。为了巩固基础知识,自学编译原理第一课:sub虚拟机和sub简单编译器。为了简单,虚拟机只支持两个命令:push和addpush要带一个数字参数,效果就是把跟的参数压栈add不用带参数,效果就是从栈顶取两个元素相加,把结果压入栈顶这里借助二叉树实现语法分析,把加法代码解析为二叉树,对二叉树采用左后遍历(先遍历左节点,再遍历游节点,再遍历父节点)。对节点值不是加号的生成push "节点值"的命令。对节点原创 2021-12-11 19:14:35 · 1182 阅读 · 0 评论 -
C++驱动bash
之前为了linux维护检验方便,实现lis命令采用centos别名实现。不恰当的别的干扰了别的命令的使用。为了不干扰系统命令,又不想每次输出执行bash的全命令,这次用C++驱动bash,这样编译好之后文件放入/usr/bin下后只要执行imedicallis命令就可呼出检验菜单。实现代码#include<cstdlib>#include<string>#include<cstdio>#include<cstring>#include<ios原创 2021-11-16 17:39:58 · 829 阅读 · 0 评论 -
实现NetCore简单的AppHost
微软的coreclr的hosts还是比较复杂的。里面代码考虑了多平台的处理。为了简单了解AppHost干了些什么,参照coreclr和网上资料改了windows版的简化AppHost。运行托管代码大体分九步/* 1.加载coreclr.dll程序集 2.调用GetCLRRuntimeHost方法得到运行时宿主 3.设置clr标志,控制运行时行为 4.启动运行时 5.设置AppDomain属性 6.找到所有运行时程序集构造TPA 7.创建AppDomian 8.执行托管代码 9.卸载程序原创 2021-11-07 19:22:02 · 925 阅读 · 0 评论 -
静态库和动态库
gcc测试静态库和动态库(.a .so)两个数相加#pragma onceextern int my_add(int x, int y);两个数相减#pragma onceextern int my_sub(int x, int y);两个数相加实现#include "add.h"int my_add(int x, int y){ return x + y;}两个数相减实现#include "sub.h"int my_sub(int x, int y){ ret原创 2021-10-31 11:11:31 · 109 阅读 · 0 评论 -
C++第一个跨平台命令ztree练习
之前写的跨平台命令是用C#的DotNetCore实现的,驱动程序需要dotnet “程序” 来驱动,还需要DotNetCore运行时。最近一直在自学C/C++跨平台开发,就那Linux的tree命令当个联系,实现简单的tree效果。代码如下:#include <iostream>#include <string> #include <cstring> #include <regex>//引用命名空间using namespace std;#原创 2021-10-16 12:57:37 · 262 阅读 · 0 评论 -
C++C#相互调函数指针
按照之前对C++函数指针的理解,C++函数指针为内存地址,可以用int或者intptr_t保存地址信息,在需要调用时候再转换成相应的函数指针。委托作为C#的指针实现形式,那么理论上可以用C#的IntPtr类型接C++返回的intptr_t地址后在转换为C#的委托对象。然后通过委托对象执行函数调用。理论上也可以把C#的函数转换成IntPtr传递给C++,C++得到intptr_t后把地址转换成相应的函数指针执行函数调用。首先实现C++的dll库代码提供的申明头#include <string>原创 2020-05-23 18:59:20 · 3803 阅读 · 0 评论 -
C++函数指针
首先,指针存的是内存地址。有指针类型的区分就是限制在这个内存地址能进行什么操作。比如int *的指针就用int限定了这个内存开始存的一个int数据。操作范围也是int数据的大小。函数指针再结合函数的申明就可以指定在该函数的内存地址上可以怎么执行方法喽。C#的委托也是这个意思,封装层面高一些。指针能干什么1.用变量传递函数?2.模块互操作?3.通过内存地址和方法约定驱动方法?指针练习部分#include "MainUtil.h"//得到两个字符串的总长度string StrTotalLen(原创 2020-05-23 11:35:01 · 493 阅读 · 0 评论 -
C++DLL调用篇
首先包一个C++的DLL#pragma once //求和extern "C" __declspec(dllexport) int Add(int &a,int &b); //求和1extern "C" __declspec(dllexport) int Add1(int a, int b); #include "MyDLL.h" using namespace std; //求和int Add(int &a,int &b) { return a原创 2020-05-19 18:54:13 · 1944 阅读 · 0 评论 -
追回C++(2)
基本类型的理解,对引用和指针的理解using namespace std;//学生实体struct StudentDto{ //名称 string CName; //英文名 char EName [50]; //年龄 int Age; //性别 char Sex; //是否缴费 bool IsFee; //分数 double FenShu;};#include <iostream>#include "Student.h"using std::cin;原创 2020-05-17 14:49:54 · 163 阅读 · 0 评论 -
追回C++(1)
#include using std::cin;using std::cout;using std::endl;int main(){cout << “ZLZ第一个复习程序!” << endl;cout << “请输入两个数字以求积!” << endl;double num1;double num2;cin >> num1 >> num2;cout << num1 << “x” <&l原创 2020-05-17 12:34:39 · 185 阅读 · 0 评论