
c++
文章平均质量分 66
luffy5459
程序猿一枚,喜欢瞎捣鼓。
展开
-
c语言调用mciSendString播放音乐
mciSendString()方法发送打开,播放,关闭指令调用系统播放音乐,如果无法播放,检查音乐文件格式是否是mp3,mpeg,avi,mav。原创 2023-08-25 11:03:36 · 927 阅读 · 0 评论 -
visual studio运行c++代码播放《起风了》
visual studio中运行c++代码播放《起风了》。原创 2023-07-31 23:27:02 · 1203 阅读 · 0 评论 -
clion + opencv环境搭建
clion配置opencv环境,通过mingw源码编译opencv,设置相关环境变量。原创 2023-05-01 09:17:27 · 3540 阅读 · 0 评论 -
c++改变控制台显示颜色
c++控制台颜色控制,SetConsoleTextAttribute(),可以设置前景色与背景色。原创 2023-01-13 20:24:03 · 997 阅读 · 0 评论 -
node-gyp编译c++编写的node扩展
node-gyp编译c++编写的node扩展,并简单调用。原创 2022-11-08 23:44:22 · 3129 阅读 · 0 评论 -
linux下socket编程中setsockopt的作用
如题所示,在linux进行socket编程的时候,一般而言,socket,bind,listen三步曲之后,就开始接收客户端请求,然后实现收发数据。 如下所示的代码,是没有setsockopt的情况:#include<stdlib.h>#include<stdio.h>#include<string.h>#include<errno.h>#include<sys/types.h>#include<sys/so...原创 2022-01-19 11:49:02 · 1782 阅读 · 0 评论 -
使用c语言库asn1c对asn文件格式实现编解码
针对asn文件编解码工作,asn1c这个开源工具对c/c++的支持非常好。可以很方便的安装和使用,目前这个工具是开源的,最新版本是0.9.28,项目地址:github.com/vlm/asn1c。官方文档地址:Open Source ASN.1 Compiler: asn1c 0.9.28。 这个工具在linux上的安装很方便。 这个工具还有一个很方便的地方在于,它可以直接将asn文件转化为c语言项目所需要的的头文件和源文件。 下面通过一个简单的示例来演示如何通过asn...原创 2021-11-29 17:38:07 · 7427 阅读 · 1 评论 -
使用ceres库将经纬度坐标GCJ02到WGS84精确转换
在之前的一篇博客中,介绍了经纬度坐标系的关系,WGS84是世界坐标系,属于原始坐标系,在商用中,需要通过火星加密算法将经纬度做转换,转换之后的坐标,称为火星坐标,简称GCJ02。这个过程称为坐标偏移算法。反过来,我们将GCJ02坐标系转为WGS84就是纠偏算法,严格来说,他们不是一对正向与反向的可逆操作,但是有理论公式可以推导。 ceres库是一个c++开源库,用来解决最小二乘法的,通过这个库,我们几乎可以将GCJ02精确转换为WGS84坐标。下面来看示例。...原创 2021-10-28 16:53:31 · 1878 阅读 · 0 评论 -
win10安装ceres环境
ceres是一个开源的c++库,在windows上安装有点复杂,它依赖其他三个库。Eigen,gflags,glog。好在这些依赖都可以通过源码安装。在windows上进行源码编译安装,需要对应的环境。这里的环境就是vs2017,cmake-3.14.0。 vs2017自带了gcc,g++编译环境,而cmake正好需要g++编译环境。 ceres源码都可以在官方下载到,这里使用的版本较早: gflags 2.2.1 需要提前编译 glog ...原创 2021-10-13 10:46:17 · 4012 阅读 · 3 评论 -
Dynamic Linking Error: Win32 Error 126问题排查
如题所示,这个问题是我在electron项目中使用ffi调用动态链接库出现的,本机运行都好好的,打包构建然后放到别的机器上运行出错。 这个问题一度也让我很迷茫,如果是路径导致的这个问题,那么把路径指定正确就可以了,但是偏偏路径也是对的,就是报错。那应该是环境问题。 我为什么要使用ffi调用动态链接库?我的需求是这样的,需要编程实现tcpip方式连接诺德施瓦茨仪表设备cmw500,其实就是visa编程了,我开始通过c语言简单实现了这个功能,以为万事大吉了,然后写了一个动态链接库,让...原创 2021-04-26 14:30:48 · 8474 阅读 · 9 评论 -
minix3下安装libevent
libevent是一个c语言编写的事件框架,支持异步IO、定时器、信号事件。它支持跨平台,大部分都是在linux下安装并使用,今天介绍在unix系统minix3上的安装。 minix3上编译环境是clang,clang++,并不是我们常见的gcc,g++,所以在进行源码编译的时候,需要指定系统编译器。再一个就是minix3上没有/usr/local这个目录,如果直接configure安装不指定libevent安装前缀prefix,那么它就会安装到/usr/local目录下,这个目录并不是系...原创 2021-04-15 10:23:52 · 368 阅读 · 0 评论 -
java通过jni调用native method
jdk中规定了native method,每一个native method背后对应有一个动态链接库来支持它,在windows系统上,就是dll后缀的文件。 native method是需要通过c/c++来实现的。 本示例所需的运行环境: jdk8 vs2017 java中调用动态链接库可以通过System.loadLibrary("Hello")来加载指定动态链接库。假定,我们可以编写这样一个java文件,定义一个hello的本地方法,然后在main函...原创 2021-04-12 17:06:07 · 823 阅读 · 0 评论 -
c语言结构体内存对齐问题
c语言中结构体使用是非常广泛的,但是结构体有一个问题,就是如果开头的字段属性是字符类型(char),紧跟着的是其他类型,比如整型、长整型、双精度、浮点型,这时候结构体的大小会发生改变,下面给出一个示例:#include <stdio.h>struct person{ char sex; int age; char name[8];}__attribute__((__packed__));int main(){ printf("sizeof(person) =...原创 2021-04-11 22:14:47 · 238 阅读 · 0 评论 -
clang: error: unable to execute command: Executable “ld“ doesn‘t exist!
如题所示,我在minix3中直接安装了clang,然后使用如下命令编译c程序报错。# clang hello.c -o helloclang: error: unable to execute command: Executable "ld" doesn't exist!clang: error: linker command failed with exit code 1 (use -v to see invocation)# 提示说缺少ld,其实需要安装binutils这...原创 2021-04-01 22:34:39 · 3865 阅读 · 0 评论 -
xcode开发c语言开启多target
xcode开发c语言,在选择project template时选择command line tool,后面填入product name,最后选择存储位置就可以了。但是一般而言c语言项目只有一个main函数的入口,如果我们要运行另一个demo,就需要新建一个project。 visual studio或者visual c++6.0都可以在现有的工程中加入新的项目,最后要运行哪一个项目,在项目名称上右键,然后设置为活动工程,最后编译运行,只会对这一个项目进行编译运行,能够满足我们在一个工程目录...原创 2021-03-14 23:18:01 · 416 阅读 · 0 评论 -
c语言自定义tcp协议实现socket通信(windows版本)
前面一篇博客介绍了mac/linux下通过C语言自定义协议实现socket通信的示例,因为大部分api与windows还有很多区别,这里就特意把windows下的tcp通信实例给介绍一下。 无论是linux,还是windows,其实c语言都是默认小端序,这个需要注意,还有一个就是结构体的内存对齐问题也是存在的,所以协议结构体我们需要注意他的大小就行了,在进行拷贝的时候,不能直接使用sizeof来计算发送数据的长度。 因为是windows,所以我们可以通过网络小助手来模拟一个服务端...原创 2021-03-08 11:28:31 · 2486 阅读 · 1 评论 -
c语言自定义tcp协议实现socket通信
一般的tcp协议示例,大家给出的demo都是类似一个helloworld的示例,简单罗列了socket建立,创建连接,发送数据,关闭连接的过程,实际上tcp通信确实也就这么多内容。但是,在实际的开发中,我们用tcp通信,肯定不会只是发送一句简单的“你好”。 实际应用中,我们需要自定义一个协议,也就是protocol,然后与服务端约定网络字节序,最后双方都能根据协议实现数据编码与解析即可。 自定义协议,没有固定的格式,没有严格的数据类型限制,只要双方都认可就行了。因为通信的双方都需...原创 2021-03-07 21:23:05 · 4848 阅读 · 4 评论 -
选择排序算法与示例详解(c语言)
选择排序是排序算法的一种,思想就是,每一轮寻找数组中最大的值或者最小的值,放在头部或者放入一个新的数组。这样经历一轮遍历,数组或者新数组就是排好序的,他的目的很明确,每次找最大值或者最小值。 这个放在头部,其实头部不是固定不变的,每次都会往后移动一位,因为前面的数据都是排好序的。这种借助当前数组做排序的算法,是为了节省空间,也是一种提高效率的办法。 如何找最大值?比较嘛,默认选择第一个元素作为最大值,依次与数组中的元素比较,有比它大的,就交换,遍历完成,就找到了...原创 2020-12-14 16:01:57 · 3734 阅读 · 1 评论 -
gdb命令调试c程序
一般开发c语言程序,都是在ide中编码,调试也是使用集成环境,有时候,我们的程序是在文本编辑器中编写的,这时候可能使用gcc编译,然后运行可执行程序。遇到需要调试的场景,我们就需要借助gdb命令了。 gdb调试,不仅局限于在linux上使用,只要机器上有gdb命令,在windows下也可以进行调试。我的机器上安装了一个树莓派的perl,使用strawberry-perl-5.32.0-64bit.msi进行的安装,他自带了一个c语言编译运行的相关命令。所以可以在windows下进行gdb调...原创 2020-12-10 10:15:19 · 450 阅读 · 1 评论 -
windows命令行下通过cl命令编译动态链接库示例
一般在windows下写一个c/c++的动态链接库,我们都是在visual studio活着visual c++这些ide里面进行编译和生成的,今天介绍,如何通过命令行来实现手动编译和生成动态链接库。 首先,确保我们的系统中安装了visual studio 2019或着其他版本,这样,我们才可以使用命令行工具。 开始->程序里面找到visual studio 2019这个文件夹,里面有命令行工具。找到x64 native tool,然后点击,打开一个cmd命令行。 ...原创 2020-12-03 10:09:05 · 5821 阅读 · 4 评论 -
c/c++中的回调函数
c/c++中的回调函数是一个很奇怪的东西,在java中,方法调用的时候,可以最多可以传入另一个对象实例,然后在方法体内,调用实例的方法,做不到方法调用的时候,传入一个回调函数作为参数,然后在方法体内进行调用。而在javascript中,这种函数回调倒是很常见。 谈到c/c++回调函数,我们需要谈一谈void*,他是一个函数指针,我们在进行回调的时候,必须要声明的一个变量。 我们先来直观的感受一下回调函数示例:#include <stdio.h>void ba...原创 2020-12-03 14:14:28 · 775 阅读 · 0 评论 -
课程设计:c++实现学生成绩管理系统
学生成绩管理系统课程设计,作为计算机科学专业学生的一门必修课,印象非常深刻,上机,编码,写报告,答辩,最后很多人勉强完成了功课,但是却很少能学到东西,算是一种遗憾吧,即使我们毕业了,仍然会想回去再做一便。 今天就来复习一遍这个课题,也让自己学习学习。 学生成绩管理系统,对于刚学编程的人来说,是有一些难度的,有循环要考虑,还需要注意界面打印,菜单管理,输入输出控制,文件读写操作,排序算法等等技巧。 学生成绩管理系统,可以分为如下几个功能: 主菜单:1、输入学生成...原创 2020-11-28 10:59:08 · 127519 阅读 · 208 评论 -
c++中char[]与char*的转换以及char*与数字互转
在c/c++中,字符串操作不可避免,而且通常,char*或者char[]就能表示字符串,这个跟java语言有很大的差别,java中char是字符,string才是字符串,他们是完全不一样的概念。在c/c++中,虽然string也可以表示字符串,但是char*表示字符串还是更常见。 既然char*和char[]都可以表示字符串,他们之间的转换是如何的呢?另外,如果字符串中都是数字,如何将他们转换为整数或者浮点数,反过来,数字如何转字符串,这个在日常的编程中,都是必须要掌握的技巧。 ...原创 2020-11-28 15:24:04 · 18415 阅读 · 0 评论 -
mac下通过gcc命令手动编译动态链接库示例
编译动态链接库,windows,linux,mac平台各不相同,从文件上来说,windows下是dll,linux下是so,mac下是dylib;命令上也会有区别,windows下用cl,linux下用gcc但是参数是-fPIC -shared,而在mac下则是gcc -dynamiclib -o libxxx.dylib xxx.c。 这里介绍在mac下手动编译动态库示例: 准备hello.h#ifndef SO_H#define SO_Hint add(int a,...原创 2020-11-25 22:41:27 · 4170 阅读 · 6 评论 -
VISA编程实例(C实现)
今天写这个文章,是因为自己工作中用到了ROHDE&SCHWARZ(即罗德-施瓦茨公司)的仪表设备,需要通过编程的方式来读取仪表上功率测试结果,本来仪表上显示了测试结果,不知道硬件部门为什么需要通过程序来获取?需求我是不明白的。 既然要实现这个功能呢?自然就硬着头皮搞了,没想到,研究了几天,发现网上有这样的程序示例。 先来说说做这个工作的必要的工具: 1、电脑安装NIVISA1850这个工具。这个工具可以通过tcp的方式连接仪表,然后通过指令来获取相关的测试结果。...原创 2020-11-24 11:21:19 · 13377 阅读 · 15 评论 -
notepad++安装c/c++简单编程开发环境
notepad++作为一个常用的编辑器,加上一些插件可以很方便的作为一个简易的编译运行环境,说是简易,是因为运行简单的程序或者demo可以很方便,如果大型的项目,还是通过visual studio,qt,vc++6.0来的更快更方便,因为可视化IDE更加工程化,环境更加齐全。 我们先来说说编译运行全部通过notepad++来做,我们需要做什么?首先,编码肯定是没有问题的,就是提示可能不太智能化。需要运行,我们需要先编译,然后运行exe程序。所以插件需要帮助我们做两件事情:编译与运行。...原创 2020-08-12 18:21:07 · 1771 阅读 · 0 评论 -
C++打印整数的八进制十进制十六进制以及打印逻辑布尔类型
C++中打印一个整数的八进制,十进制,十六进制很方便,无需定义别的函数或者方法,直接通过关键字oct,dec,hex就可以,另外打印布尔类型可以通过关键字boolalpha,下面直接看代码:#include <iostream>using namespace std;int main(){ int x = 0; cout<<"请输入一个整数:"<...原创 2020-03-08 11:16:23 · 1992 阅读 · 0 评论 -
MFC与第三方类库CWebPage开发javascript函数调用示例
今天思索一个问题,想着怎么用c++调用百度地图,结果网上有一篇文章介绍了如何使用MFC项目来结合CWebPage来调用百度地图。看了整篇博客,思路很清晰,但是看下来,其实就是利用了MFC调用html页面的javascript函数来达到调用百度地图的目的。本质上还是web应用的地图。不是真正意义上的从无到有加载百度地图。自己通篇搞下来,也算是积累了一些经验。我认为这个是一个MFC调用html...原创 2020-03-06 23:50:27 · 1554 阅读 · 1 评论 -
c++使用malloc来做内存分配创建链表
c++中创建链表可以直接通过new对象的方式创建节点,然后将节点之间的关系通过next指针来关联起来,另外,也可以通过malloc来分配内存,创建节点。这里介绍如何通过malloc来创建链表。 malloc分配内存的方式为malloc(sizeof(typename)),最后 还需要通过类型转换,将它转为(typename *),如下所示:node *p=NULL;p =...原创 2019-12-02 23:50:29 · 2626 阅读 · 0 评论 -
二分查找算法介绍
二分查找算法的实现过程如下:在排序数组中查找某一个数据项,首先让待查数据与中间下标元素开始比较,如果相等则返回,如果小于中间下标元素,重新开始从低位开始,(中间下标-1)结束的数组内,继续执行相同的查找操作,如果大于中间下标元素,重新开始从中间下标+1,高位结束的数组内,继续执行相同的查找操作,直到低位超过高位,如果没有找到,返回-1,如果找到,则返回对应的中间下标。因为每次执行一次查询操...原创 2019-11-18 14:52:44 · 1423 阅读 · 0 评论 -
C++实现简单链表
链表是最常用的一种数据结构,无论什么语言,学习数据结构,都绕不开链表,下面通过c++来实现简单链表,所谓简单链表,就是构建链表,然后遍历打印链表。 c++中构建链表,最简单的是使用结构体来定义节点,节点定义很简单:节点数据,下一个节点,这就是链表的全部,另外,为了通过new的时候,直接创建一个节点,我们可以通过定义一个带参数的构造函数来实现。 链表结构体定义如下:...原创 2019-11-13 16:04:16 · 11241 阅读 · 0 评论 -
windows下VC++6.0编写c++程序连接mysql示例
windows下通过c++编码连接mysql数据库,需要做一些设置,因为我们需要连接mysql并执行相关操作,需要使用mysql提供的api,这api在mysql.h头文件中定义了,因此我们需要在项目中引入mysql.h文件,另外在执行调用的时候,libmysql.lib和libmysql.dll提供了函数调用,我们还需要引入libmysql.lib和libmysql.dll。 ...原创 2019-10-17 22:08:49 · 1646 阅读 · 0 评论 -
C++中如何求数组长度
C++中没有直接提供求数组长度的方法,提供了sizeof(),begin(),end()等方法,可以供求数组长度使用。可以通过两种方式来求数组长度,这里使用模版类。一个是使用sizeof()做除法,另一种办法是通过end(),begin()做减法。代码如下。#include <iostream>#include <string>using namespace std;...原创 2018-04-03 23:19:45 · 69450 阅读 · 6 评论 -
Dll动态链接库创建与隐式链接方式使用
C++动态链接库的背景: windows操作系统诞生以来,dll就作为win操作系统的基础,通常情况下dll不能直接运行,也无法接收消息,只能供其他可执行程序或者dll来调用,完成某项功能,他的函数只有被调用才会发挥作用,Windows中有三个重要的dll,他们分别是Kernal32.dll,User32.dll,GDI32.dll。作用: 隐藏实现细节,再提供给三方客户端使用,便于保护...原创 2018-04-09 20:42:29 · 1461 阅读 · 0 评论 -
def模块定义方式创建动态链接库与动态加载使用dll
前面介绍了通过宏定义_declspec(dllexport)的方式创建动态链接库,需要定义头文件和宏,定义函数时需要使用宏定义,这种方式过于繁琐,这里介绍使用模块定义文件的方式创建动态链接库,只需要一个源文件和一个def文件即可,代码非常简单,通过动态加载的方式使用dll也非常简单,只需要将动态链接库放入项目路径下即可。1、创建动态链接库工程,并手工新建文件Dll1.def,定义需要导出的方法名和...原创 2018-04-09 20:55:22 · 1832 阅读 · 0 评论 -
五分钟配置好vs2017+opencv3.4.1开发环境
opencv提供了丰富的图像处理功能,这里介绍vs2017+opencv开发环境配置。1、下载安装opencv-3.4.1。opencv官网地址,https://opencv.org/,这里就下载windows版本的exe文件,下载之后点击,无需安装,直接就是解压。2、将解压出来的opencv/build/x64/vc15/bin配置到环境变量Path中。3、启动vs2017,创建项目...原创 2018-09-28 10:32:23 · 3749 阅读 · 0 评论 -
gcc编译c++文件
gcc是编译c语言的,默认情况下,如果直接编译c++程序,会报错:[root@server demo2]# lshello.cpp[root@server demo2]# cat hello.cpp #include <iostream>using namespace std;int main(){ cout<<"hello,c++"<<end...原创 2019-02-15 15:47:30 · 23719 阅读 · 5 评论 -
linux下C++连接sqlite3
linux下,c++连接sqlite3,不需要额外的安装依赖库,linux自带了sqlite3,在编译的时候,只需要将sqlite3的库加入编译参数中即可。sqlite3数据库可以指定数据存储的路径,我们一般使用类似testsqlite3.db这样的文件命名数据库文件,在命令行下连接testsqlite3.db,只需要运行sqlite3 testsqlite3.db即可。无需用户名和密码,数据库也...原创 2019-02-27 15:43:08 · 4932 阅读 · 2 评论 -
linux下C++连接mysql查询数据
windows下使用C++连接mysql相对繁琐,这里直接在linux下通过C++连接mysql,执行查询操作。linux下连接mysql,需要本机有libmysqlclient库文件,最直接的方式就是安装mysql,因为本身就需要一个mysql服务器。linux下安装mysql,这里就不说了,默认,我们会安装上mariadb,如果需要安装mysql社区版本,我们需要下载对应的repo文件,然...原创 2019-02-20 14:55:15 · 5024 阅读 · 5 评论 -
linux下C++连接redis
linux下c++连接redis,需要安装redis,同时还需要安装hiredis,hiredis是c++操作redis的api库。redis的安装这里不介绍了,很多教程。这里直接从hiredis安装说起。1、下载hiredis,并解压。https://github.com/redis/hiredis[root@server software]# wget https://github.c...原创 2019-02-21 11:25:22 · 2489 阅读 · 1 评论