BMP格式结构详解
前段时间搞了一段时间图像采集,对BMP格式和JPG格式的图片又进一步深入的研究了一番,这篇博文就先介绍BMP格式文件的结构,在网上翻阅了很多资料,发现有很多大牛在这一点的研究颇深...下面就借鉴下他们的东西了...
首先,整个bmp文件的内容可以分为3到4块。之所以分为3到4块而不是固定的值,是因为,对于bmp来说可能存在调 ...
muduo 与 libevent2 吞吐量对比
libevent 是一款非常好用的 C 语言网络库,它也采用 Reactor 模型,正好可以与 muduo 做一对 比。
本文用 ping pong 测试来对比 muduo 和 libevent2 的吞吐量,测试结果表明 muduo 吞吐量 平均比 libevent2 高 18% 以上,个别情况达到 70%。
测试对象
libevent 2.0.6-rc (http://monkey.org/~provos/libevent-2.0.6-rc.tar. ...
Win32开发入门(6):创建右键菜单
快捷菜单,说得容易理解一点,就是右键菜单,当我们在某个区域内单击鼠标右键,会弹出一些菜 单项。这种类型的菜单,是随处可见的,我们在桌面上右击一下,也会弹出一个菜单。
右键菜 单的好处就是方便,它经常和我们正在操作的某个UI元素联系起来,比如我们正在使用文本框输入文本 ,我们在文本框中右击,就会看到可能有【 ...
C/C++字符串处理之String - 常字符串
Table of Contents
概要
理解String(BasicString)
关于TempString基类
源码
参考阅 读
概要
我们知道,C++标准库(STL)提供了string(basic_string)类进行字符串操作。字符串很可能除了内存 分配器(allocator)1外使用最为频繁的STL类。但是C++社区对string的指责从来就没有停止过。
归纳起来,STL的 string类主要有以 ...
如何理解Modbus协议
这些日子使用Modbus协议做设计,有关协议的理解,大家理解不一致,我在此做个笔记,和大家分享,说说读线圈,写线圈,读保持寄存器,读输入寄存器是什么意思。
读线圈:就是说读开关量输出的状态,看看开关量输出的到底是开着的还是关着的,这样说有点不专业,但是好明白。比如要在上位机显示开关量输出的当状态,就得用这 ...
C++ POCO库中文编程参考指南(2) 基本数据类型(Poco/Types.h)
基本类型在Poco/Types.h头文件中。以下以 GNU C/C++ 和 CLang 为例。不 过要强调的是,POCO 有极好的跨平台性,你能想到的平台,几乎都可以运行 POCO。
1 有符号整型
typedef signed char Int8;
typedef signed short Int16;
typedef signed int Int32;
2 无符号整型
typedef unsigned ch ...
C++ POCO库中文编程参考指南(9) Poco::Net::DNS
1 Poco::Net:NS
namespace Poco {
namespace Net {
class Net_API DNS {
public:
static HostEntry hostByName(const std::string& hostname);
static HostEntry hostByAddress(const IPAddress& address);
static HostEntry resolve(const std::string& address);
static IPAddress ...
C++ POCO库中文编程参考指南(8) 丰富的Socket编程
1 POCO 中的 Socket
POCO 中有 丰富的 Socket 封装。其继承关系如下:
本文暂且只介绍 StreamSocket、ServerSocket、DatagramSocket
2 Poco::Net::ServerSocket
ServerSocket 是一个封装层次比较低(low level)的 Socket,其使用的是 TCP 连接。在实际的 Server 中推荐使用 TCPServer 或 Reactor 框架。下面是例程:
#inc ...
C++中的值传递,引用传递及指针传递
C++的值传递,引用传递,指针传递这些概念一直是困扰C++程序员,我一直也没有一个能说清他们之间的关系通过一个简单的实例,或者说浅显的说法,找了一些相关资料,和自已的个人感受,简单介绍一下。
c++中传递参数的方式有三种:传参数的值(称为值传递,简称传值),传参数的地址(称为地址传递,简称为传址),和引用传递(简称为传引用 ...
波形捕捉:(2)创建捕捉设备对象
你可以通过调用 DirectSoundCaptureCreate8 或 DirectSoundFullDuplexCreate8 函数来创建一个捕捉设备对象。这两个函数都 获取一个指向IDirectSoundCapture8 接口的指针。
DirectSoundCaptureCreate 的lpcGUID参数或 DirectSoundFullDuplexCreate8 的pcGuidRenderDevice参数可以是一个由枚举 得到的GUID,或者是如下预定义 ...
C++ Iostreams用法详解(二)标准输入输出
首先说我们最常用的两个全局对象cin和cout,以下摘自MSDN:
You can then extract values from cin or wcin to read the standard input. The rules for doing so are outlined in the description of the class basic_istream Class. You can also insert values to cout or wcout to write the standard output. The rule ...
详解qsort函数的用法
qsort 功 能: 使用快速排序例程进行排序
用 法: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));
各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针
用于确定排序的顺序 排序方法有很多种, 选择排序,冒泡排序,归并排序,快 ...
C++编程中错误及警告信息(1) cannot have cv-qualifier
Explanation
不能有 CV 限定符,在 C++ 中 CV 限定符指const和volatile。
非成员函数
在 C++ 中, 普通函数(非类的成员函数)不能有 CV 限定,即const和volatile限定。即非类的成员行数,用const进行修饰:
int
test() const //这是不对的,普通函数(非成员函数不能有CV约束)
{
//实现
}
静态函数
在 C++ 中, ...
C++内存优化:二级间接索引模式内存池
.H内容如下:
/*********************************************************
在一些不确定内存总占用量的情形下,频繁的使用new申请内存,再通过链表
进行索引似乎是很常规的做法。自然,也很难做到随机定位。
下面的内存池类是用二层索引表来对内存进行大块划分,任何一个块均只需索
引3次即可定位。 ...
C++对数组地址的解析
在C++编程中,我们进程会用到数组,这看起来很简单,因为,数组就是存储相同类型元素的集合嘛,不过, 当你还没考虑到数组的地址问题时,一切都是简单的,如果你接触了数组中的地址概念,也许你会改变你的想 法。
下面,我列出几个例子,看看这些例子输出的会是什么:
首先给出数组的定义: int a[10];
1. cout
看看结 ...
代码加密:糟糕的写法也是一种加密
哎!
惨……
最近接连维护两个很烦人的项目,我的第一想法就是重写!可是上头的意思是说我的想法太疯狂。
可每次有这种情况我都感觉还是重写划算点……
之前的之前一个东东重写也就一周时间,而上头还是决定用着,对那东东很麻烦怕新写的别人不适应 以及稳定性的担心。而结果就没重写,接下来的几个月我都被那玩意烦。哎
回 ...
Boost库中的实用工具类使用入门
简介:实用工具类开发和维护会耗费程序员的时间。Boost 通过提供几个高质量的库,从而简化了此 过程,您可以将这些库轻松集成到现有的代码库中。本文简单概述一些较流行的 Boost 实用工具类,并 帮助您了解如何将它们投入使用。
实用工具类(utility classes)在几乎任何适当规模的 C++ 项目中都是必需的,但是不存在满足此 ...
C++调整进程的特权的实现方法
通过OpenProcess(PROCESS_ALL_ACCESS,FALSE,dId)获取ID较低进程的句柄时可能会得到错误代码,这些进程都是保持系统活动的系统服务。一个普通用户进程不允许执行针对系统服务的所有操作。如果一个程序意外终止了一个系统服务,那么整个系统都将崩溃。因此,一个进程只有拥有确切的访问权限才会有适当的特权 。
由于多种原 ...
C++ POCO库中文编程参考指南(6) Poco::Timestamp
1 类型别名
三个时间戳相关的类型别名,TimeDiff表示两个时间戳的 差,第二个是以微秒为单位的时间戳,第三个是以 100 纳秒(0.1 微妙)为单 位的时间戳:
typedef Int64 TimeDiff; /// difference between two timestamps in microseconds
typedef Int64 TimeVal; /// monotonic UTC time value in microsecond resolution ...
由struct的静态构造函数说起
最近才知道struct和class的静态构造函数的触发规则是不同的,不像class在第一次使用类的时候触 发静态构造函数。如果只访问struct实例的字段是不会触发静态构造函数调用的。通过测试发现当访问静 态字段,struct本身的函数(静态和实例)和带参数的构造函数就会引起静态构造函数的执行。而调用默 认构造和未覆写的基类虚函 ...