- 博客(33)
- 资源 (9)
- 收藏
- 关注
原创 UTF-8与GBK互转:字符串和文件 C++实现
文章目录1、头文件2、源文件3、实例3、cmake配置4、补充平台:Windows/Linux编辑器IDE:JetBrains Clion第三方库:Boost在操作文本文件的时候经常会遇到中文乱码的问题,尤其是在Windows平台下,本文针对常见的两种编码格式UTF-8和GBK编写一套代码实现二者的互转,可实现单字符串string,文件、批量文件、多级目录转换功能,详见代码:1、头文件...
2019-12-20 17:26:08
814
原创 C/C++调用ftp命令(Winodws and Linux)
利用ftp功能通过脚本的形式进行批量处理,代码示范如下:1、Windows环境// ftp命令形式实现 string commandFilePath = strShScriptFile + ".tmp"; FILE *file = fopen(commandFilePath.c_str(), "w"); if (file) { fprintf(...
2018-09-20 14:08:37
2921
原创 linux下实现memcpy_s函数
memcpy_s是windows下的一种安全内存操作函数,但是linux下并没有实现,在此自己实现一个类似功能的函数memcpy_st:int memcpy_st(void *det, size_t detSize, const void * src, size_t srcSize, char *cppName, uint32_t lineNumber){ uint8_t error...
2018-08-13 16:48:48
9007
原创 printf函数打印延时现象
linux下,程序运行期间有时会遇到printf不立即输出或不输出的现象,尤其是debug调试的时候,对于Windows不会遇到此类问题,这是因为linux中printf之后不会自动向标准输出流stdout添加\n,所以务必添加fflush()函数。...
2018-08-13 16:44:51
2959
原创 fread/fwrite函数返回值问题
函数原型:#include <stdio.h>size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);nmemb是需要读取的数据元素个数; size是...
2018-08-13 16:26:50
3211
原创 C++(printf/cout等打印函数)中文输出乱码问题
C++中文输出乱码的问题,除去系统字符集格式等常见原因外,还有可能是“N方字符集”不一致导致的。这个N通常是3,即.cpp,.h,.hpp源文件编码格式、编译器对源文件解释用的编码格式、执行文件的编码格式。1. Windows下VS工具通常建议将“3方字符集”设置成GBK(Winows-936)编码格式; 当然,如果你不想使用GBK格式,也可通过菜单栏的文件—高级保存选项—编码,选择需要编码...
2018-08-13 16:19:02
29218
原创 _aligned_malloc函数以及对应linux版本函数
此函数是C标准新增的windows下动态申请对齐内存函数,原型:#include<malloc.h>void * _aligned_malloc( size_t size, size_t alignment ); 参数size是申请的内存大小;参数alignment为内存对齐大小,必须是2的幂;_aligned_malloc申请的内存...
2018-08-13 15:54:44
8093
原创 codeblocks设置断点无效
进入菜单栏的项目->构建选项,勾选[-g], [-wall],再debug的时候会弹出一个对话框,直接勾选“是”即可
2018-08-10 16:53:23
2645
原创 Visual Studio debug调试时提示找不到exe
出现这种情况的原因通常是因为生成exe文件的目录和执行目录不一致导致的,排查方法如下:1、output directory菜单project—properties—configuration properties—general—output directory,这个就是debug生成exe的目录; 2、command和working directoryconfigurat...
2018-08-10 16:45:34
21339
7
原创 Visual Studio调试dump文件(Windows/C/C++)
调试之前务必确保:生成dump文件的程序版本和当前调试所用的程序版本完全一致(即pdb/源文件的时间戳、版本号等务必一致),否则会报类似”…binary do not matchs…”错误。1、将dump文件拷贝到PDB所在目录;2、打开vs菜单栏的Tools—-Options—-Debugging—-Symbols a、若是首次调试dump,需要微软基础库的PDB信息,需在”Symbol fil
2017-09-13 16:24:20
6878
原创 各种格式时间/日期的显示及转换(C/C++)
编程过程中经常需要各种格式的时间形式,比如整型时间、年月日形式的时间等,下面对各种格式的时间及操作进行简单的总结: 1、获取当前时间的整型数值time_t ttime;ttime = time(NULL); // 秒数struct timeb timeSeed;ftime(&timeSeed); // timeSeed.millitm毫秒数ttime为1970年1月1日至今所经历的时间,单位
2017-08-08 17:21:52
4161
原创 遍历目录下文件/子目录(C/C++)
一、第三方库 Poco Poco库的功能很强大,且支持跨系统,其中DirectoryIterator类具有强大的文件操作功能,下面就是个简单的遍历目录下文件的代码示例:#include #include #include #include "Poco/DirectoryIterator.h"using Poco::DirectoryIterator;#include "Poco
2017-08-08 16:28:23
1300
原创 IP字节顺序与IP格式
对于IP而言不同之处主要在于两个方面,一是字节顺序;二是格式一、字节顺序(NBO和HBO) 分为网络字节顺序和主机字节顺序,字节顺序也可理解为大、小端模式; 数值16的十六进制是0X0010,4096的十六进制是0X1000,在Intel的CPU机器中,由于是小端模式,则数值16的存储方式就是1000,4096的存储方式就是0010,而IBM类的机器是大端模式,存储方式就没有变化。网络字节顺序N
2017-06-14 12:16:30
726
原创 变参日志函数
在记录日志时经常需要输入多种格式的内容,我们可以编写一个动态参数的打印日志函数: 实例:#include<stdio.h>#include<string>void LogError(const char *format, ...){ FILE *gErrorFile = NULL; cahr buffer[256]='D:\test\errorlog.log';
2017-06-14 11:15:20
368
原创 Poco库Timer定时器
Poco库是一个很强大的C++库,其中常使用到的定时器类为Timer,下面就编写一个简单的定时器程序,具体说明参见注释’//’部分:#include <stdio.h>#include <iostream>#include <string>#include "Poco\Timer.h"using namespace std;using Poco::Timer; // 使用Ti
2017-06-13 17:34:57
6062
原创 以当前时间命名日志文件
多数时候需要以日志形式记录程序运行状态,日志的名称用时间(精确到秒)来命名可以避免重复实例:int CreateErrorLog(){ string path = "F:\logpath"; char buffer[256]; buffer = path.c_str(); len = path.length(); if (_access(buffer, 0)
2017-06-13 15:58:41
2275
原创 编写获取命令行参数Getopt函数(C++)
Linux系统下C++有自带的获取主函数main命令行参数的函数getopt,但在Windows系统下并没有这样的系统函数存在,不用担心,我们可以自行编写。实例: Project名称testint nic_option = -1;char cont_optin = '0';char destIP_option[16] = { 0 };int getopt(int argc, char *arg
2017-06-13 15:32:35
973
原创 随机数---秒及毫秒级随机数种子(C++)
一、函数 1、rand 函数原型: int rand(void); 所在头文件: stdlib.h 功能描述: rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int),用unsigned int 双字节是65535,四字节
2017-06-13 15:10:54
22265
2
原创 Intel光网卡调优
场景: 随着电信行业步入4G时代,业务数据海量增长,为了提升处理能力,项目最近准备采购一批光网卡以取代普通网卡进行移动网络语音数据采集处理。 项目上的Probe程序在使用普通千兆网卡时理想处理速率在300Mbps~400Mbps,性能瓶颈为网卡本身采集速率无法提升。本次采购的是Intel核心的万兆光网卡,前期开发测试环境如下: 产品名称:Intel(R) Ethernet Server Ada
2017-01-18 16:03:59
4506
原创 锁(C++)
读写锁互斥锁读写锁访问者一般有两种:读者和写者,写者是一种排他的访问方式,即独占资源,读者可以是共享的,就是说可以有多个线程同时去访问某个资源,所以,读写锁也可以叫做共享-独占锁。 读写锁比起mutex具有更高的适用性、更高的并行性,可以有多个线程同时占用读模式的读写锁,但是只能有一个线程占用写模式的读写锁。读写锁最适用于对数据结构的读操作次数多于写操作的场合,因为,读模式锁定时可以共享,而写
2016-11-11 18:00:36
1041
原创 boost::asio::io_service与socket(C++)
boost::asio::io_serviceio_service类为下面的异步对象提供核心的I/O操作函数,主要用途还是用于socket编程boost::asio::ip::tcp::socketboost::asio::ip::tcp::acceptorboost::asio::ip::udp::socketboost::asio::deadline_timerio_servie 实现
2016-11-10 16:08:47
9560
原创 文件&&头文件&&源文件(C++)
头文件和源文件中的函数声明与定义在一个工程中函数只能被定义一次,而函数的声明可以有很多次。通常不建议在头文件中进行函数的定义,因为当头文件被多个源文件包含时实际上就是将该段函数的定义代码复制加载到当前源文件之中,即被重复定义了,此时编译器会提示函数重复定义的错误。 举例01: 函数func01在源文件b.cpp中定义,声明在a.h头文件中,此时也需要在源文件b.cpp中添加a.h头文件。其他源文
2016-11-07 17:16:34
1479
原创 srand和rand函数(C++)
背景rand是一个产生随机数的函数,但严格意义上来说它产生的是伪随机数,因为计算机的随机数都是伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子(小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现,即以相同的随机种子重新开始一个周期) 。所以它不是真真意义上的随机数,是一个伪随机数,是根
2016-10-24 14:27:59
860
原创 Timer定时器(C++)
SetTimer函数原型:UINT_PTR SetTimer ( HWND hWnd, // 窗口句柄,通常可以省去 UINT_PTR nIDEvent, //定时器ID,多个定时器时可以通过该ID判断是哪个定时器 UINT uElapse, // 时间间隔,单位为毫秒 TIMERPROC lpTimerFunc // 回调函数 )
2016-10-21 17:41:05
8140
原创 Event 事件(C++)
背景当创建一个线程时,其实那个线程是一个循环。这样就带来了一个问题,在那个死循环里要找到合适的条件退出那个死循环,那么是怎么样实现它的呢?在Windows里往往是采用事件的方式,当然还可以采用其它的方式。在这里先介绍采用事件的方式来通知从线程运行函数退出来,它的实现原理是:在那个死循环里不断地使用Wait(poco库里的wait函数)函数来检查事件是否满足,如果满足就退出线程,不满足就继续运行。
2016-10-21 15:42:41
2142
原创 C++线程小介(Runnable)
join函数join()等待子线程执行完之后,主线程才可以继续执行下去,然后主线程才会释放掉执行完后的子线程资源;如果不想等待子线程,可以在主线程里面执行detach()将子线程从主线程里分离,子线程执行完成后会自己释放掉资源。分离后的线程,主线程将对它没有控制权了。
2016-10-17 15:41:44
3952
原创 C++ 常用&生僻函数小记
string类find函数substr函数动态载入DLL相关函数LoadLibrary函数GetProcAddress函数FreeLibrary函数getopt函数判断文件的访问权限localtime函数SetConsoleCtrlHandler控制台处理函数inline函数CreateDirectory创建文件目录整形字符转换strtoul函数_ultoa函数Set
2016-10-12 19:01:40
864
原创 C++杂七杂八
typedefRunnable多线程操作Event事件文本文件二进制文件NPF网络数据包过滤器NIC网卡io_serviceAPI相关介绍winAPISDKCRTC标准库时间结构体FILETIME和SYSTEMTIME模板operator操作符typedef理解复杂声明可用的“右左法则”: 从变量名看起,先往右,再往左,碰到一个圆括号就调转阅读的方向;括号内分析完就跳出
2016-10-12 18:13:53
593
原创 TCP/IP模型小结
1、OSI七层模型TCP/IP五层模型2、TCP/IP协议数据封装过程 以传输层采用TCP或者UPD、网络层采用IP、链路层采用Ethernet为例,TCP/IP中报文的封装过程如图所示。用户数据经过应用层协议封装后传递给传输层,传输层封装TCP头部,交给网络层,网络层封装IP头部后,再交给数据链路层,数据链路层封装Ethernet帧头和帧尾,交给
2016-09-22 07:57:57
412
原创 SIP协议小介
SIP消息由3部分组成:启动行、消息头、消息体。以回车换行符号CRLF或由CR、LF(十六进制为0x0d、0x0a)其中之一组成的标志进行换行。消息头后填充空行CRLF。示例协议如下:1、启动行格式如下:start-line(Request-Line / Status-Line)[ message-header ]CRLF[ message-body ]启动
2016-09-21 23:56:47
1524
原创 Kettle安装部署及实例演示
Kettle安装部署及实例演示本文档包括三部分内容:1、Java 的安装部署2、Kettle的安装部署3、Kettle的开发实例演示 Date:2013/12/14
2016-09-05 12:17:17
3432
原创 C++ map简介
1、map的定义map是一类关联式容器,它是STL模板类。关联的本质在于元素的值与某个特定的键相关联,而并非通过元素在数组中的位置类获取。它的特点是增加和删除节点对迭代器的影响很小,除了操作节点,对其他的节点都没有什么影响。对于迭代器来说,不可以修改键值,只能修改其对应的实值。map类所在的头文件是#include //注意:STL头文件没有扩展名.h map对象是模板
2016-09-02 16:50:52
888
转载 C++类定义与实现(Class)
一、"类" 的介绍 在C++中, 用 "类" 来描述 "对象", 所谓的"对象"是指现实世界中的一切事物。那么类就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点, 如自行车和摩托车, 首先他们都属于"对象", 并且具有一定得相同点, 和一些不同点, 相同点如他们都有质量、都有两个轮子, 都是属于交通工具等。"都有质量"、"两个轮子"属于这个对象的属性, 而"都能够当做交通工
2016-09-02 13:43:15
2681
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人