
C++
月棠
只做一件事,并把它做好
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
关于 undefined reference to `write(std::string const&)‘ 这种参数是“std::string“ 类型的错误解决方法
关于-D_GLIBCXX_USE_CXX11_ABI 宏使用的一些问题原创 2022-08-10 15:46:08 · 1717 阅读 · 1 评论 -
C++ 实现图片base64编解码
最近使用人脸识别restfulAPI遇到了要求图片base64编码后传输问题。 1 什么是base64编码所谓Base64,就是说选出64个字符—-小写字母a-z、大写字母A-Z、数字0-9、符号”+”、”/”(再加上作为垫字的”=”,实际上是65个字符)—-作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。2 解决的问题网络传送渠道(纯文本协议)并不支持所原创 2018-04-27 10:22:06 · 3072 阅读 · 7 评论 -
ZeroMQ Router模式C++代码示例
//Linux下可编译通过#include <cstdio>#include <cassert>#include <thread>#include <chrono>#include <memory>#include <vector>#include <zmq.h>#include <stri...原创 2018-04-25 11:33:23 · 970 阅读 · 0 评论 -
ZeroMQ推拉模式C++代码示例
Ventilator代码:#include #include #include "zmq.hpp"int main (void){ ///任务分发器 zmq::context_t context(1); // 用于发送消息的套接字 zmq::socket_t sender (context, ZMQ_PUSH); sender.bind( "原创 2018-04-19 14:09:17 · 2217 阅读 · 5 评论 -
ZeroMQ Router模式C++代码示例
具体的Router模式这里不再介绍,直接贴代码,Linux下可以编译测试通过。Client代码:#include#includeusing std::endl;using std::cout;int main(){ zmq::context_t Context(1); zmq::socket_t ReqSock(Context, ZMQ_REQ); Re原创 2018-04-19 11:59:47 · 1288 阅读 · 0 评论 -
ZeroMQ 发送和接收消息C++代码示例
///接收消息: zmq_msg_t message; // 创建消息结构 zmq_msg_init (&message); // 初始化空消息 zmq_recv (socket, &message, 0); // 接收消息 int size = zmq_msg_size (&message); // 计算消息的大小 char原创 2018-04-18 16:31:44 · 5098 阅读 · 0 评论 -
ZMQ 第一章 ZeroMQ基础
# ZMQ 第一章 ZeroMQ基础首先得感谢原创作者的分享!**作者: Pieter Hintjens , CEO iMatix Corporation.****翻译: 张吉 , 安居客集团 好租网工程师**With thanks to Bill Desmarais, Brian Dorsey, CAF, Daniel Lin, Eric Desgranges,转载 2018-04-16 17:23:28 · 2414 阅读 · 0 评论 -
数据大小端64位字节序转换(__int64类型数据从小端转换为大端
//////__int64类型数据从本机(小端)转换为网络字节序 __int64 i64_host; //本机(小端) __int64 i64_net; //网络字节序(大端) int i32_host_h; int i32_host_l; i32_host_l = i64_host & 0xffffffff; i32_host_h = (i64_host >> 3原创 2018-02-02 11:13:38 · 5291 阅读 · 0 评论 -
跨平台(Windows+Linux)的Socket通讯程序(一)—底层封装
【摘要】编写Socket通讯程序是一个老话题。本文重点介绍Windows平台和Linux平台Socket通讯的不同,采用C++,编制了一个简单的跨平台的Socket通讯库。一、Socket通讯的基础知识Socket通讯是两个计算机之间最基本的通讯方法,有TCP和UDP两种协议。关于这两种协议的区别,不少文章已有详述,这里,稍微总结一下:1.TCP是面向连接的,是“流”式的,意即通讯两端建立了转载 2018-02-01 16:57:53 · 1433 阅读 · 0 评论 -
跨平台(Windows+Linux)的线程辅助程序
如果一个项目需要跨平台,可选择的编程语言就受到一定的限制,如果再考虑运行效率,可选择的语言似乎只能是C/C++了。与Java不同,C/C++是被操作系统“原生态”支持的,因而各操作系统实现的方式也略有不同,各自做了不同的扩展,而不象Java一样有统一库函数及接口。用C/C++做跨平台开发需要考虑操作系统的不同,当然,有别人写好的跨平台库,这当中,最著名的就是boost了。本文不是讨论boost的转载 2018-02-01 16:56:25 · 259 阅读 · 0 评论 -
C语言实现一个简单的多定时器
linux下多定时器的实现一、已有的定时器接口 时空管理是计算机系统的主要任务。在时间管理中,我们经常利用定时器处理事情:比如tcp协议中利用定时器管理包超时,视频显示中利用定时器来定时显示视频帧,web服务中利用定时器来管理用户的超时。windows系统提供了SetTimer和timeSetEvent等定时器接口,linux中则提供了setitimer等接口。这些函数...原创 2018-06-05 14:00:41 · 4804 阅读 · 5 评论 -
阻塞队列+线程池代码
BlockingQueue是一个继承自Queue的接口,在Queue的队列基础上增加了阻塞操作。简单来说,就是在在BlockingQueue为空时从队头取数据将会被阻塞,因为此时还没有数据可取,一旦队列中有数据了,取数据的线程就会释放得到了数据;如果BlockingQueue有容量限制且满了,那么插入数据的线程将会阻塞,知道队列中有空闲位置可以插入数据了,才会释放。经过上面一段描述,可以发现这就是...原创 2018-06-21 16:09:45 · 352 阅读 · 0 评论 -
双向链表listnode代码学习
直接上双向链表listnode代码:// listnode类型的声明,里面只有两个指针prev,nexttypedef struct _listnode { struct _listnode *prev; struct _listnode *next;} listnode;上文代码定义了结构体listnode,但奇怪的是,这个结构体只有链接节点的前驱prev和后继next...原创 2019-07-18 17:35:19 · 569 阅读 · 0 评论 -
关于多线程使用zeromq出现各种断言或段错误的问题
正如文档所说,zmq套接字不是线程安全的。应用程序端上的锁是不够的。每个套接字必须从一个线程创建、使用和关闭。那么如果实现每个套接字必须从一个线程创建、使用和关闭呢?答案是使用inproc传输在线程之间通信。例如,请参见actor模式:https://github.com/zeromq/czmq#czmq-actors 和guide: http://zguide.zeromq.org/下面列...原创 2019-04-19 11:24:35 · 2525 阅读 · 0 评论 -
protobuf:常用序列化/反序列化接口
C数组的序列化和反序列化#include "addressbook.pb.h"#include <iostream>using namespace std;/*//C数组的序列化和序列化API//在/usr/local/include/google/目录下,查找包含"SerializeToArray"所有的文件,同时打印所在行//sudo grep "Serialize...转载 2019-04-22 09:48:07 · 4891 阅读 · 0 评论 -
opencv 读取文件目录下所有的图片并给图片画框
最近在做ffmpeg推流gpu性能测试,需求是先将视频转换成图片保存,标记图片后再转成视频流。这是一个小demo实现用opencv 读取文件目录下所有的图片并给图片画框。#include <iostream>#include <string>#include <vector>#include "opencv2/opencv.hpp"int main...原创 2018-09-12 15:40:23 · 2238 阅读 · 0 评论 -
Linux获取系统当前时间
#include <time.h>void get_time(){ timespec time; clock_gettime(CLOCK_REALTIME, &time); //获取相对于1970到现在的秒数 tm nowTime; localtime_r(&time.tv_sec, &nowTime); char ...原创 2018-07-12 17:09:17 · 1766 阅读 · 1 评论 -
google tcmalloc 内存池(不定长内存池)使用
一.安装 tcmalloc (google-perftools) 是用于优化C++写的多线程应用 tcmalloc在gperftools之中,故想要使用tcmalloc,就得先安装gperftools。在linux下,其安装步骤如下:1 tar xzvf gperftools-2.7.tar.gz 2 cd gperftools-2.7 3 ./configure –enable-fr...原创 2018-07-05 14:28:14 · 2808 阅读 · 0 评论 -
linux C++ 使用openssl rsa算法实现对计算机物理地址进行签名和认证
首先需要使用openssl生成公钥和私钥,然后对字符串进行签名和认证. license.h#pragma once#include &lt;iostream&gt;#include &lt;string&gt;#include &lt;fstream&gt;#include &lt;cstdlib&gt;#include &lt;cstring&am原创 2018-07-11 15:35:56 · 744 阅读 · 0 评论 -
md5的C++语言实现
#include "iostream" #include "string" #include "math.h" using namespace std; typedef char byte; //初始化四个数 long A=0X67452301l; long B=0XEFCDAB89l; l...原创 2018-07-11 14:20:58 · 260 阅读 · 0 评论 -
基于C++的内存池
MemoryPool.h#pragma once#include&lt;iostream&gt;#include&lt;vector&gt;#include&lt;string&gt;using namespace std;template&lt;class T&gt;class ObjectPool //对象池{ struct BlockNo原创 2018-06-27 10:34:37 · 589 阅读 · 0 评论 -
zmq 代理模式异步代码(czmq)
最近在做服务器,发现zmq的同步收发不是很适合项目需求,这里有一套异步模式的zmq demo分享给大家,仅供参考. 我这里使用的是 代理模式, 1.client 代码 这里使用的.hpp的zmq,发现并不好,建议使用.h的zmq.#include <zmq.hpp>#include <iostream>#include <string>#inclu...原创 2018-06-22 16:56:30 · 4685 阅读 · 0 评论 -
windows下 GBKToUTF8编码转换
char* TcpHandler::GBKToUTF8( const char* chGBK ){ DWORD dWideBufSize=MultiByteToWideChar(CP_ACP, 0,(LPCSTR)chGBK,-1, NULL, 0); wchar_t * pWideBuf=new wchar_t[dWideBufSize]; wmemset(pWideBuf, 0原创 2018-01-31 17:32:48 · 3499 阅读 · 0 评论 -
windows下 UTF8ToGBK编码转换
char* TcpHandler::UTF8ToGBK( const char* chUTF ){ int len = MultiByteToWideChar(CP_UTF8, 0, chUTF, -1, NULL, 0); unsigned short * wszGBK = new unsigned short[len + 1]; memset(wszGBK, 0, len * 2 +原创 2018-01-31 17:29:36 · 408 阅读 · 0 评论 -
C++ “error LNK1169: 找到一个或多个多重定义的符号”的解决方法
大概有下面几种情况会引起这个错误。 1.变量定义: 解决办法是在a.h中的变量声明前加上extern 关键字,表示这里只是声明不定义,然后在a.cpp中不加extern关键字定义这个变量,编译链接顺利通过。2.函数定义: 在a.h中定义函数Init: void Init() {} b.cpp中包含头文件 a.h,链接时也会出现相同的错误。 解决办法有两个,一种是添加inline关键字,原创 2017-08-24 10:05:40 · 2339 阅读 · 0 评论 -
C++ 未定义基类错误解决
这是类超前的错误。即在a.h中包含了b.h,而在b.h中又包含了a.h。原创 2017-08-23 17:45:59 · 15938 阅读 · 5 评论 -
C++ 获取本机mac地址参考
//取到所有的地址void RohonTraderApi::GetAllIpMacAddr(){//PIP_ADAPTER_INFO结构体指针存储本机网卡信息 PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();PIP_ADAPTER_INFO pTmpAdapterInfo = pIpAdapterInfo;原创 2016-11-17 17:18:52 · 2510 阅读 · 0 评论 -
C++ 加载.txt文件
首先创建一个FemasCfg.txt[Femas]IsUserID = czzh01IsInvestorID = 1UserID = 053743接下来加载FemasCfg.txtchar cPath[200]={0};::GetModuleFileName((HMODULE)g_FemasDll_Handle,cPath,sizeof(cPath));原创 2017-08-18 16:13:50 · 496 阅读 · 0 评论 -
C++ 查看dll导出函数
输入如下命令,查看dll导出函数:dumpbin -exports D:\xxx.dll 回车原创 2017-08-18 15:07:02 · 5500 阅读 · 0 评论 -
VC++6.0修改字体的方法(非软件自带字体)
在VC6.0下更改字体,我们一般通过菜单-Tools-Options-Format来更改但在win7 64位系统下这一选项下的字体和字体颜色有时是空的无法选择,这里我们可以通过注册表来更改。Win+R输入"regedit"打开注册表编辑器,定位到HKEY_CURRENT_USER/Software/Microsoft/DevStudio/6.0发现下面没有"Format",这也是为转载 2016-11-18 14:13:05 · 1279 阅读 · 0 评论 -
C++ JsonCpp用法
数据压缩:int CRHTraderServerUnitApi::OnRspOpenAuth(CB2BRspOpenAuthFeildEX* pRspFieldEX){Json::Value root;if (strlen(pRspFieldEX->FlagField.DeviceUUID)>0 ){Json::Value FlagInfo;JsonPackFl原创 2016-11-17 17:11:33 · 410 阅读 · 0 评论 -
C++ R6010 -abort() has been called错误分析及其解决方法
导致出现这样的原因有: 1.非法指针访问和内存泄漏 2.大家再查查吧,一定是指针出现问题了。设置的指针范围跟你运行的不对 3.指针访问内存越界出现问题。 4.是因为不支持中文。 5.内存不够分配 6.当时后来检查发现的问题应该是多线程访问资源出的问题。 7.检查一下exe和dll是否混用的不同版本的crt 解决方法:原创 2016-11-17 17:16:02 · 7827 阅读 · 0 评论 -
C++ 获取今天日期
struct tm *local;time_t t;t=time(NULL);local=localtime(&t);int nToday = (local->tm_year+1900)*10000 +(local->tm_mon+1)*100+local->tm_mday;原创 2016-11-17 17:17:20 · 977 阅读 · 0 评论 -
C++ 获取系统当前时间方式
#include //// 方式一 time_t tt = time(NULL); tm* t= localtime(&tt); printf("%d-%02d-%02d %02d:%02d:%02d\n", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min原创 2017-09-01 15:18:35 · 5560 阅读 · 0 评论 -
C++ 查找字符串中的子串,截取子串前的所有字符
比如:字符串 “cu_f”,现在只要”cu”,也就是去掉”_f” std::string str1=”cu_f”; int pos=0; pos=str1.find(“_f”); ///获取”_f”出现的位置 if(-1 == pos) ///pos=-1说明没有找到 “_f” { return; } std::string str2原创 2017-11-01 16:52:36 · 9182 阅读 · 0 评论 -
C++ 写数据到Excel
char chPath[MAX_PATH + 1] = {0};std::string str = GetCurrDate();const char *pPath = str.c_str();//格式化文件名字_snprintf(chPath, MAX_PATH, "%s/_data.csv", pPath,pPath);FILE *fp;fp = fopen(chPath,"a+");原创 2017-11-24 11:04:34 · 3903 阅读 · 0 评论 -
linux c utf8和GBK 的转换函数
方法一:使用如下两个函数 mbstowcs将多字节编码转换为宽字节编码 wcstombs将宽字节编码转换为多字节编码 注意, 需要系统编码的支持, 可以通过locale -a 查看系统支持的。若不支持zh_CN.gbk, 需要安装,#include #include #include #include #include #include #include /***转载 2017-12-28 10:11:51 · 1557 阅读 · 0 评论 -
C++ 加载.ini配置文件方法
例如:加载config.ini文件config.ini 文件内容如下:[LegalHoliday];节假日datelist=20170102, 20170127, 20170130, 20170131, 20170201, 20170202, 20170403, 20170404, 20170501, 20170529, 20170530, 20171002, 2017原创 2017-08-18 15:15:25 · 1717 阅读 · 0 评论 -
C++ 打印日志方法
首先写一个头文件 ////CommonFun.h#pragma once#include //log等级定义 #define LOG_DEBUG_LEVEL 4#define LOG_APP_LEVEL 3#define LOG_WARN_LEVEL 2#define LOG_ERROR_LEVEL 1#define RETURN_OK0原创 2017-08-18 15:24:51 · 10941 阅读 · 0 评论 -
C++ 加载.xml文件
首先需要在头文件包含以下两个头文件:#include "tinyxml.h"#include "tinystr.h"#define RETURN_OK0#define RETURN_ERROR -1class TiXmlElement;class TiXmlNode;class TiXmlDocument;创建一个DataSet类,原创 2017-08-18 15:41:31 · 1023 阅读 · 0 评论