随笔分类 - C/C++
摘要:作者:庄晓立 (liigo)日期:2011-1-19原创链接:http://blog.csdn.net/liigo/archive/2011/01/19/6153829.aspx转载请保持本文完整性,并注明出处:http://blog.csdn.net/liigo关键字:HTML,解析器(Parser),节点(Node),标签(Tag)这是进入2011年以来,本人(liigo)“重复发明轮子”系列博文中的最新一篇。本文主要探讨如何设计和实现一个基本的HTML文本解析器。众所周知,HTML是结构化文档(Structured Document),由诸多标签(<p>等)嵌套形成的著名的文
阅读全文
摘要:作者:庄晓立 (liigo),2010/7/12本文首发地址:http://blog.csdn.net/liigo/archive/2010/07/12/5727859.aspx转载请注明出处:http://blog.csdn.net/liigo 本文目标:在指定的某个LIB或OBJ文件中,搜索定位某一段可执行代码(X86指令集合),最终确定其所属函数。 原由:假设我们自己编写的软件被杀毒软件误报为病毒,又假设我们已经通过某种途径获知软件(EXE)中被视为病毒特征码的某段代码(X86指令集合)(详见本人(liigo)前一篇博客),又假设我们已经通过某种途径得知这段代码来自编译链接过程中的某个L
阅读全文
摘要:作者:liigo时间:2010/4/26首发地址:http://blog.csdn.net/liigo/archive/2010/04/26/5530942.aspx转载请注明出处:http://blog.csdn.net/liigo 前传 前传,故事发生在原作之前,而创作于原作之后。我借此宝地,非常抱歉地声明,此文分析方法有误!错误源于我对 fElapsedTime 的理解有误。原作中假设fElapsedTime的值随时间持续增长;其实不然,fElapsedTime通常是记录“当前正在渲染的帧”自开始渲染以来消耗的时间,到开始渲染下一帧时自然被清零。fElapsedTime不是一个持续增长的
阅读全文
摘要:由C/C++的开源项目和开源协议说开去 ——和CSDN博客专家王绍全的讨论记录以下,是 2009/11/30 在 CSDN博客专家群,我(liigo)与CSDN博客专家王绍全(Eric)的讨论记录,发表之前已征得他的同意。内容上,主要表达了我私下里对于C/C++开源项目的抱怨,和由于版权的关系不能有效地将其应用于工作中的烦恼。王绍全[wwwsq] 14:55:22http://www.theregister.co.uk/2009/01/21/open_source_projects_08/print.html在18万个开源项目中,有47%是用C,28%用Java,11%用PHP庄晓立[liig
阅读全文
摘要:作者:liigo日期:2009/11链接:http://blog.csdn.net/liigo/archive/2009/11/23/4858535.aspx转载请注明出处:http://blog.csdn.net/liigo 编译(compile)和链接(link),是计算机编程语言的通用处理系统。编译,是把程序源代码转换为目标文件;链接,是把目标文件转换为可执行文件。把编译和链接分成两个相对独立的子系统,是为了简化,是为了分而治之,也有基于通用性的考虑。编译器(compiler)的任务是把程序源代码编译为目标文件。通常每一种编程语言,都会有它自己的编译器,各种编译器的输出都是目标文件(.o
阅读全文
摘要:在魅族M8手机(WinCE6.0系统)上设置文件关联,需生成以下注册表项:HKEY_CLASSES_ROOT\.xxx defaultvalue: xxxfileHKEY_CLASSES_ROOT\FileAssociate\xxxfile\shell defaultvalue: <path_of_exe>HKEY_CLASSES_ROOT\FileAssociate\xxxfile DefaultIcon: <path_of_icon>其中 xxx 指代欲关联的文件名后缀,<path_of_exe> 指代欲关联到的EXE文件,<path_of_ico
阅读全文
摘要:本文原始链接:http://blog.csdn.net/liigo/archive/2009/10/29/4744700.aspx作者:liigo, 2009/10/29转载请注明出处:http://blog.csdn.net/liigo 假设有一个基于关键字匹配的文本过滤系统,或类似的系统,需要一个配置文件,用于设定欲过滤的关键字列表。该怎么设计这样一个配置文件呢?又该如何编码实现呢?此文将给出一个可行的方案。这是本人(liigo)重复发明轮子系列文章的新一篇。 因为是一个小型应用系统,我对配置文件提出的要求是:简单直观,易于实现,同时保持足够的灵活性和可扩展性。我对配置文件的设计结果如下:
阅读全文
摘要:《M8围棋谱》v0.8,是我(liigo)为魅族M8手机开发的围棋打谱软件,还在开发过程中,目前功能不全,但基本功能可用。基本功能:打开并解析SGF棋谱,单步向前向后,落子音效,自动提子,显示棋局信息和解说,支持自定义皮肤。作者:liigo,http://blog.csdn.net/liigo此软件是 Google Code 上的开源软件,项目主页为:http://code.google.com/p/m8weiqipu/2009/10/18更新(v0.8),很多新功能: 显示棋局信息(对弈双方、赛事、日期、胜负、总落子数等); 显示解说信息,以及与解说相关的标注; 突出显示最新落子的棋子; 允
阅读全文
摘要:A指的是,我处理C/C++静态库lib文件,将其加载到内存,分析其二进制格式,提取其中的各种数据信息(obj,段(Section),符号(Symbol),重定位(Relocation),字符串表(StringTable) 等)。 B指的是,我读入LIB文件,改写和调整其中的部分数据,再写出新的LIB文件。在改写数据之前,要先加载并分析,重用A是很自然的事情。 A这一部分功能,一直在测试,一直在正常使用,一直没问题。B这一部分,代码被仔细检查了好多遍,也不应有问题了。可是为什么到最后,生成的LIB文件不合法呢(不被链接器认可)?经过漫长而坚苦的排错过程,发现最终导致问题出现的根源是:A中会修改.
阅读全文
摘要:一定要按照顺序操作,否则你很可能持续遇到很多奇怪的问题(ffmpeg对编译系统版本要求比较高)。1. www.mingw.org: 下载并安装 MinGW 5.1.4 (http://jaist.dl.sourceforge.net/sourceforge/mingw/MinGW-5.1.4.exe),安装时选中 g++, mingw make。建议安装到D:\MinGW。 下载并安装 MSYS Base System (MSYS-1.0.11, MSYS-1.0.11-rc-1.exe, http://jaist.dl.sourceforge.net/sourceforge/mingw/MS
阅读全文
摘要:本文首发地址:http://blog.csdn.net/liigo/archive/2009/09/22/4582018.aspx转载请注明出处:http://blog.csdn.net/liigo作者:liigo, 2009/09/22 在下围棋时,当一个棋子落到棋盘上,它会对周围对方棋子的死活产生影响,如果对方棋子没有气了(死了),必须从棋盘上拿掉(提子)。这个过程体现到围棋软件中,就需要通过程序代码判断某一个棋子或某一片棋子的死活状态,进而把死掉的棋子从棋盘上移除。 进一步分析的话,刚落下的棋子,只可能威胁到周围与其紧临的上下左右方向的四个对方棋子(也可能是三个或两个,如在边角的话),而
阅读全文
摘要:平时写程序时经常会用到的遍历子目录枚举文件的功能,用 Windows API 函数 FindFirstFile() 和 FindNextFile() 直接实现起来会相当繁琐,有许多细节需要注意和记忆,要在短时间内写出可以正常工作的、没有BUG的、能够递归遍历多层子目录并枚举其中所有文件的程序代码,不是一件轻松的事情。以下这个 doFileEnumeration() 函数,是我(liigo)在 Windows API 函数 FindFirstFile() 和 FindNextFile() 的基础上封装实现的,可以轻松自如的处理遍历子目录枚举文件的任务,使用起来非常简单,具有较高的实用价值。这个.
阅读全文
摘要:这是本人(liigo)独立实现的SGF格式围棋棋谱文件解析器,本文介绍其实现细节。网络上肯定可以找到完善的开源的SGF解析器,这是毋庸置疑的,我不直接使用它们,也不参考它们的实现代码,而是自己独立编码实现,是有原因的,因为我想自己重复发明轮子,并且认为这样更有助于提高我的编码能力。(关于我的“一定要学会重复发明轮子”的不成熟的论调,今后我将会专门撰文表述。) 我(liigo)开发的这个SGF解析器,采用基于事件的简单API,类似于XML解析器中的SAX(Simple API for XML)。这种解析器的核心是:由用户事先提供一系列回调函数,解析器在解析的过程中,依次调用相关的回调函数并传入.
阅读全文
摘要:一:C标准库中的 assert() 会粗暴地结束程序 assert()在发布版(release)的程序中被编译为空语句,它仅存在于调试版(debug)的程序中,它的意图很明显,就是及时提醒开发者注意程序中的非正常情况,并辅助开发者排除这种非正常情况,使程序逐步趋于完善。一般来说,一个assert()断言失败,必然是程序的运行状态超出了程序员的预期,或程序流程进入到目前代码尚未处理的一个分枝。在这种情况下,程序员要找出问题的根源并改进程序,就需要对assert()上下文进行分析。此时继续向下单步执行几句代码,可以搜集更多的信息,有助于更及时的解决问题。可是“微软公司提供的”C标准库的assert
阅读全文
摘要:《M8空中警报》(M8AirAlarm) v1.0 作者:liigo, 2009/5, http://blog.csdn.net/liigo 当您的魅族M8手机不慎跌落时,本软件将在M8落地之前,给予空中警报(声音),提醒您及时伸手拉住8妹,减少不必要的经济损失! 如果M8向下自由落体,理论上在脱手的那一刻就会警报,实际上稍微有一点延迟。如果垂直向上抛起,M8将在到达最高点的那一刻警报。最小警报范围:离地约10厘米。演示视频已上传:http://www.tudou.com/programs/view/ZP96HqtzKBw/源代码已开放:http://code.google.com/p/m8a
阅读全文
摘要:时隔十个月之后,这是“EF速度测试”系列的最新一篇。最近偶然看到这个网页(或这里)对各脚本语言的速度评测,就随手把EF也测了一把。说实话,拿编译型语言EF跟一帮动态脚本语言进行比较,我(liigo)心里也有点不好意思哈,好在那里面还有C和Java(EF应该是跟Java神似的编程语言)。C vc6:0.22 seconds 1.00 xEF 1.0公开测试版(EFIDE 0.2.2):0.35 seconds 1.59 xEF的此次表现,可以排在前三位,略低于C,但高于Java,远高于Lua, Python, Perl, TCL, PHP, JavaScript, Ruby等。原文中,C代码(使
阅读全文
摘要:int hex_char_value(char c){ if(c >= '0' && c <= '9') return c - '0'; else if(c >= 'a' && c <= 'f') return (c - 'a' + 10); else if(c >= 'A' && c <= 'F') return (c - 'A' + 10); assert(0);
阅读全文
摘要:作者:liigo原文链接:http://blog.csdn.net/liigo/archive/2008/12/06/3460565.aspx转载请注明出处:http://blog.csdn.net/liigo/所谓PE文件版本信息,本文最后有幅图,看了就很明了了。为EXE/DLL添加版本信息,总体思路很简单,就是自行生成特定格式的资源数据,调用Win32API函数UpdateResource将该数据写入文件中即可(或者由编译器在输出文件时插入该数据)。关键是这一段数据的生成,相对比较复杂,而且繁索,不小心就还容易出错。这是一块纯数据(raw data),格式比较复杂,结构体嵌套N层,而这些个
阅读全文
摘要:此为转贴,抱歉,原文作者、来源不详。但相信应该是程序员同行。言语中多有调侃,博君一笑而已,无论您是女人,还是任一编程语言的追随者,都不必介怀。有的女人就像Windows 虽然很优秀,但是安全隐患太大。有的女人就像UNIX 她条件很好,然而不是谁都能玩的起。有的女人就像C# 长的很漂亮,但是家务活不行。有的女人就像C++,她会默默的为你做很多的事情。有的女人就像JAVA,只需一点付出她就会为你到处服务。有的女人就像JavaScript,虽然对她处处小心但最终还是没有结果。有的女人就像汇编,虽然很麻烦,但是有的时候还得求它。有的女人就像易语言,接触的时候不错,时间长了就知道想和她相处很深不行,而且
阅读全文
摘要:在易语言中使用“易写易库(EXEK)”开发易语言支持库,不仅功能上没有限制,而且还能玩出“花”儿来,甚至是别人玩不出的“花”儿。一:不要命令分类通常来说,支持库中的命令都被分为若干个类别。如易语言核心库中的命令被分为“流程控制”“算术运算”“逻辑比较”“位运算”“变量操作”“数组操作”等等。对核心库来说这当然是必须的,毕竟里面有数百条命令,只有清晰的分类,才更便于用户查找和记忆。但是,在支持库内命令数量很少,或者说逻辑上同属一个类别的情况下,还有必要进行命令分类吗?这时再进行命令分类,是否属于多此一举?这样的例子很多,如下图中的“易向导支持库”“可执行文件数据转换支持库”“编码转换支持库”“多
阅读全文
浙公网安备 33010602011771号