随笔分类 -  C++/VC++

上一页 1 2 3 4 5 6 7 8 ··· 12 下一页
二进制文件的读写详细剖析
摘要:一).一般问题 二进制文件与我们通常使用的文本文件储存方式有根本的不同。这样的不同很难用言语表达,自己亲自看一看,理解起来会容易得多。因此,我推荐学习二进制文件读写的朋友安装一款十六进制编辑器。这样的编辑器有很多,在我们的 CVF 附带的集成开发环境下就可以(将二进制文件拖动到 IDE 窗口后松开)。Visual Studio 2005 也是可以的。(不过需要在 File 菜单下 Open,File) 另外推荐一款使用较多的软件,叫做 UltraEdit(以下简称 UE)。是很不错的文本编辑器,也能做十六进制编辑器使用。 为什么要用十六进制编辑器?而不用 2 进制呢?因为 2 进制实在太... 阅读全文
posted @ 2014-03-18 17:28 知识天地 阅读(3606) 评论(0) 推荐(0) 编辑
虚拟键值表,模拟按键表
摘要:虚拟键十六进制值十进制值相应键盘或鼠标键VK_LBUTTON011鼠标左键VK_RBUTTON022鼠标右键VK_CANCEL033Ctrl-Break键VK_MBUTTON044鼠标中键VK_BACK088Backspace键VK_TAB099Tab键VK_CLEAR0C12Clear键VK_RETURN0D13Enter键VK_SHIFT1016Shift键VK_CONTROL1117Ctrl键VK_MENU1218Alt键VK_PAUSE1319Pause键VK_CAPITAL1420CapsLock键VK_ESCAPE1B27Esc键VK_SPACE2032Space键VK_PRIOR 阅读全文
posted @ 2014-03-05 15:52 知识天地 阅读(3067) 评论(0) 推荐(0) 编辑
CString Format 乱码问题
摘要:CStringm_buf;CStatic*m_static;char*szName;...m_buf.Format(":%s",szName);m_static->SetWindowText(m_buf);为什么显示出来时乱码?char*szName;是ascii码,如果工程定义了unicode,就会出现乱码vc2008默认是unicode。 阅读全文
posted @ 2014-03-04 10:34 知识天地 阅读(1390) 评论(0) 推荐(0) 编辑
linux C中调用shell命令和运行shell脚本 (
摘要:1、system(执行shell 命令)相关函数 fork,execve,waitpid,popen表头文件 #include定义函数 int system(const char * string);函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。返回值 如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针 阅读全文
posted @ 2014-02-17 08:17 知识天地 阅读(3059) 评论(0) 推荐(0) 编辑
内存写越界导致破环堆结构引起的崩溃问题定位经验[如报错malloc(): memory corruption或free(): invalid next size]
摘要:前段时间开发的一个后端C模块上线后,线上出core,初始时,因为訪问压力不大,所以崩溃是上线3天左右出现的。当时用gdb跟进调用堆栈并检查源代码,发现出core位置的代码沒有啥问题。因为当时开发任务较重,且该模块不保存状态(崩溃重新启动不影响对外服务),所以沒有深入跟进。后来随着client版本号逐渐放量导致訪问压力上升,噩梦開始了。。。 该模块会不定时core掉,并且差点儿每次崩溃时的调用堆栈都不一样,关键是最后几层堆栈非常多都位于差点儿不可能出问题的代码中,比方库函数或厂里的公共库。 好在在众多core文件里发现规律:每次基本都是在对内存动态操作时挂掉,比方m... 阅读全文
posted @ 2013-12-27 10:07 知识天地 阅读(6736) 评论(0) 推荐(1) 编辑
Linux与Windows编译器的区别
摘要:移植工作開始后的第一步就是在目标平台Linux上进行编译,并链接源码。因为须要移植的软件通常并未在Linux平台上编译过,编译的过程可能会遇到非常大的困难。普通情况下,由类型声明引起的编译错误是比較easy修复的。比方Microsoft C/C++的头文件使用__declspec( dllimport/dllexport )来输入和输出DLL函数,在Linux上,把函数声明成extern “C”,或者再结合使用DEF文件,使用对应的链接命令就能够解决这些问题。但困难的地方在于编译器之间存在差异的部分,同一时候这也是可能引起非常多执行时问题的重要因素,读者有必要在開始移植之前就充分了解。在此讲述 阅读全文
posted @ 2013-12-27 10:06 知识天地 阅读(3349) 评论(0) 推荐(0) 编辑
点到线段的距离计算方法
摘要:如何计算点到线段的最近距离 算法原理图在二维/三维图形学系统当中,线段的拾取是一个经常使用的功能如何根据鼠标点来判断线段是否被选择了,最主要的方法之一是通过点到线段的最小距离来判定的无论二维还是三维情况下,使用点到直线的距离公式似乎是最直接的选择但是不要忘记点到直线公式计算的是点和直线之间的关系,而不是点和线段之间的关系需要额外的判断,点在线段上的投影点是否位于线段内部,是才可以采用点到直线的公式,否则就不能算法如下 class Pointfloat Distance(Point p1, Point p2); // 返回两点之间的距离float Dista... 阅读全文
posted @ 2013-12-26 09:38 知识天地 阅读(5184) 评论(0) 推荐(0) 编辑
利用海伦公式求点到线段距离的算法
摘要:点到直线的距离可以直接做垂线求取,但线段是有首尾点的,若要求距离则要考虑首尾点。点和线段的关系大致可以有下面几种doubleGetPointDistance(CPointp1,CPointp2){returnsqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));}floatGetNearestDistance(CPointPA,CPointPB,CPointP3){//----------图2-------------------- floata,b,c;a=GetPointDistance(PB,P3);if(a=b*b+c*c)//-- 阅读全文
posted @ 2013-12-26 09:35 知识天地 阅读(1221) 评论(0) 推荐(0) 编辑
统一横轴墨卡托投影(UTM)
摘要:UTM 坐标系统使用基于网格的方法表示坐标。UTM 系统将地球分为 60 个区,每一个区基于横轴墨卡托投影。画图法中的地图投影方法能够在平面中表示一个两维的曲面,比如一个标准地图。图 1 展示了一个横轴墨卡托投影:图 1. 横轴墨卡托投影 UTM 经度区范围为 1 到 60;当中 58 个区的东西跨度为 6°。经度区涵盖了地球中纬度范围从 80°S 到 84°N 之间的全部区域。 一共同拥有 20 个 UTM 纬度区,每一个区的南北跨度为 8°;使用字母 C 到 X 标识(当中沒有字母 I 和 O)。A、B、Y、Z 区不在系统范围以内;它们覆盖了南极和北 阅读全文
posted @ 2013-11-18 09:48 知识天地 阅读(9558) 评论(0) 推荐(0) 编辑
二维,三维坐标旋转算法(公式)
摘要:本文是有关二维,三维坐标旋转算法笔记。1.二维坐标旋转。二维坐标旋转公式图下:void Rotate2(double x1, double y1, double alpha, double& x2, double& y2){ x2 = x1 * cos(alpha) - y1 * sin(alpha); y2 = x1 * sin(alpha) + y1 * cos(alpha);}2.三维坐标旋转在处理三维坐标旋转时,使用标准的数学公式是沒有问题的。但是把二维坐标旋转调用三次,也能够实现三维坐标的旋转,而且有易读易懂,処理速度快的长处。void Rotate3(double 阅读全文
posted @ 2013-11-14 11:32 知识天地 阅读(7878) 评论(0) 推荐(0) 编辑
CreateFile函数使用方法详细介绍
摘要:CreateFileThe CreateFile function creates or opens the following objects and returns a handle that can be used to accessthe object: files pipes mailslots communications resources disk devices(Windows NT only) consoles directories(open only)CreateFile 函数创建或打开下列对象,并返回一个能够用来訪问这些对象的句柄。 文件 pipes 邮槽 ... 阅读全文
posted @ 2013-09-28 17:20 知识天地 阅读(12281) 评论(0) 推荐(0) 编辑
socket通信技术介绍
摘要:[-]网络中进程之间怎样通信什么是Socketsocket一词的起源socket的基本操作socket函数bind函数网络字节序与主机字节序listenconnect函数accept函数readwrite等函数close函数socket中TCP的三次握手建立连接详细解释socket中TCP的四次握手释放连接详细解释一个样例实践一下动动手“一切皆Socket!”话虽些许夸张,可是事实也是,如今的网络编程差点儿都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间怎样通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与webserver通信的?当你用Q 阅读全文
posted @ 2013-09-06 16:45 知识天地 阅读(1791) 评论(0) 推荐(0) 编辑
C++ pair 使用方法
摘要:类模板:template <class T1, class T2> struct pair參数:T1是第一个值的数据类型,T2是第二个值的数据类型。功能:pair将一对值组合成一个值,这一对值能够具有不同的数据类型(T1和T2),两个值能够分别用pair的两个公有函数first和second訪问。详细使用方法:1.定义(构造):1 pair<int, double> p1; //使用默认构造函数2 pair<int, double> p2(1, 2.4); //用给定值初始化3 pair<int, double> p3(p2); //拷贝构造函数 阅读全文
posted @ 2013-06-20 18:00 知识天地 阅读(767) 评论(0) 推荐(0) 编辑
无处不在的Socket——linux中的socket编程
摘要:“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与webserver通信的?当你用QQ聊天时,QQ进程怎么与server或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下:1、网络中进程之间如何通信?2、Socket是什么?3、socket的基本操作3.1、socket()函数3.2、bind()函数3. 阅读全文
posted @ 2013-06-10 01:44 知识天地 阅读(602) 评论(2) 推荐(0) 编辑
白话经典算法系列之五 归并排序的实现
摘要:归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp]view plaincopy//将有序数组a[]和b[]合并到c[]中voidMemeryArray(inta[],intn,intb[],intm,intc[]){inti,j,k;i=j=k=0;while(i<n&&j<m){if( 阅读全文
posted @ 2013-05-29 23:54 知识天地 阅读(326) 评论(0) 推荐(0) 编辑
void及void指针含义的深刻解析
摘要:void的含义void即“无类型”,void*则为“无类型指针”,可以指向任何数据类型。void指针使用规范①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。例如:int*pint;void *pvoid;pvoid = pint; /*不过不能pint= pvoid; */如果要将pvoid赋给其他类型指针,则需要强制类型转换如:pint= (int *)pvoid;②在ANSIC标准中,不允许对void指针进行算术运算如pvoid++或pvoid+=1等,而在GNU中则允许,因为在缺省情况下,GNU认为void*与char*一样。sizeof(*pvoid 阅读全文
posted @ 2013-05-29 23:52 知识天地 阅读(288) 评论(0) 推荐(0) 编辑
BitBlt介绍
摘要:设备上下文绘图有很多种方法。例如通过创建位图画刷,利用其填充一个区域来实现图像的绘制。此外,还可以使用CDC类的位图函数来输出位图到设备上下文中。BitBlt 用于从原设备中复制位图到目标设备,语法格式如下:BOOLBitBlt(int x,int y,int nWidth,int nHeight,CDC*pSrcDC,int xSrc,int ySrc,DWORDdwRop);x:目标矩形区域的左上角x轴坐标点。y:目标矩形区域的左上角y轴坐标点。nWidth:在目标设备中绘制位图的宽度。nHight:在目标设备中绘制位图的高度。pSrcDC:源设备上下文对象指针。xSrc:源设备上下文的起 阅读全文
posted @ 2013-05-29 23:50 知识天地 阅读(670) 评论(0) 推荐(0) 编辑
CreateFile用法和例子
摘要:函数原型: HANDLE CreateFile( LPCTSTR lpFileName, //指向文件名的指针 DWORD dwDesiredAccess, //访问模式(写/读) DWORD dwShareMode, //共享模式 LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针 DWORD dwCreationDisposition, //如何创建 DWORD dwFlagsAndAttributes, //文件属性 HANDLE hTemplateFile //用于复制文件句柄 ); 参数列表 lpFile... 阅读全文
posted @ 2013-05-29 23:48 知识天地 阅读(915) 评论(0) 推荐(0) 编辑
CFileDialog的用法简介
摘要:CFileDialog文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下:CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );参数意义如下:bOpenFileDialog 为TRUE则显示打开对话框,为F 阅读全文
posted @ 2013-05-29 19:08 知识天地 阅读(414) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 8 ··· 12 下一页