最后更新于 .

自从snprintf代替了sprintf,相信大家对snprintf的使用都不会少,函数定义如下:

int snprintf(char *str, size_t size, const char *format, …);

但是大家在使用snprintf的时候是否真的清楚参数里size的意思呢?看下面的例子:
假设我想将一个char类型的变量打印成2进制,我应该怎么写呢?

之前有个同事这样写的:

char a=‘a’;
char str[20];
snprintf(str,2,“%02x”,a);

对不对呢,错了。
1.2不应该是2,应该是3.
2.也不建议直接写3,应该写sizeof(str)

所以建议的写法是:

char a=‘a’;
char str[3];//再大点也没有问题
snprintf(str,sizeof(str),“%02x”,a);

解释如下:
size是限定最终生成的dest的字符数,最多拷贝size-1个字符; 一般情况下size会取sizeof ...

最后更新于 .

网上从来不缺编程字体推荐的文章,当然vim(gvim)字体的推荐文章也是多不胜数,但是大部分都是想当然的认为哪些字体好用就介绍出来,甚至都没有自己亲自试过,也没有考虑过用户使用19英寸的显示器和14英寸的笔记本时对字体的要求到底有什么不同,鉴于以上几点,我决定写这样一篇文章,真正介绍vim(gvim)中最适合的编程字体。 注:由于vimrc中中文字体的设置需要用到中文,所以请务必保证vimrc的编码是gbk格式,如果不是gbk格式,可以通过1.打开vimrc。2.:set fenc=gbk 3.:w。的操作来解决。

一.17~19(或更大)英寸屏幕    

1)英文字体:    

名字:Bitstream Vera Sans Mono    

大小:10px        

在vimrc中的配置如下:

set guifont=Bitstream_Vera_Sans_Mono:h10:cANSI

优点:        

a)0 O ...

最后更新于 .

呵呵,其实说是vim正则表达式查找替换(3),更主要是对之前没有介绍的vim正则表达式基础知识的补全。毕竟基础搞不清楚,就别指望以后的进阶啦~~

一.vim中常用的正则表示的元

$  匹配一行的结束
^ 匹配一行的开始
\< 匹配一个单词的开始
\> 匹配一个单词的结束
* 匹配0或多次
\+ 匹配1或多次
\= 匹配0或1次
\a      匹配一个字符
\d      匹配任一数字
\u      匹配任一大写字母
[]      匹配范围,如t[abcd]s 匹配tas tbs tcs tds
\{}     重复次数,如a\{3,5} 匹配3~5个a
\( \)   定义重复组,如a\(xy\)b 匹配ab axyb axyxyb axyxyxyb …
\| 或,如:for\|bar 表示匹配for或者bar
\%20c 匹配第20列
\%20l 匹配第20行

二 ...

最后更新于 .

之前已经写过一篇vim正则表达式查找替换,今天我们继续来写vim正则表达式查找替换(2),主要是一些代码编写中可能用到的查找替换技巧,希望对大家有用。

1.删除行尾的空白字符(包括空格和tab)

:%s/\s\+$//

2.删除空白行

:g/^[ ,\t]*$/d

3.压缩空白行(即两行变成一行)

:%s/^\n\+/\r/

4.压缩重复行(即重复的行变成一行,只能两行两行的压缩)

%s/^\(.*\)\n\1$/\1/

从而可以得知,匹配重复2行的命令是:

/^\(.*\)\n\1

重复3行的命令是:

/^\(.*\)\n\1\n\1

5.删除行尾的^M字符(dos换行符)

%s/\r//g

OK,就这么多,以后有了新的就再总结啦~《vim正则表达式查找替换》我会继续写下去,争取做成一个系列~

最后更新于 .

在程序中,我们经常性的会使用到时间格式的转化,比如讲time_t转化成string,或者反过来转,下面就是实现的代码。

分为 2009-3-24 和 2009-3-24 0:00:08两种时间格式。
时间格式:2009-3-24 :

#include <sys/time.h>
/*
    string to time_t
    时间格式  2009-3-24
*/
int API_StringToTime(const string &strDateStr,time_t &timeData)
{
    char *pBeginPos = (char*) strDateStr.c_str();
    char *pPos = strstr(pBeginPos,"-");
    if(pPos == NULL)
    {
        return -1;
    }
    int iYear = atoi(pBeginPos);
    int iMonth = atoi(pPos + 1);

    pPos = strstr ...

最后更新于 .

在linux下面,我们不得不自己写makefile,makefile的确博大精深,但是实际上对于日常的使用来说,无非就是
1:编译可执行程序。2:编译lib库 3:编译so库
本博针对上面三种目的各自写出了makefile模版,希望对大家有所帮助。
一.编译可执行程序
当前目录下制定文件编译成可执行文件(连接外部库的话只需要更改INC和LIB即可)

CXX = g++
TARGET = bitmaploctest
C_FLAGS += -g -Wall
LIB_FLAGS = -pthread
all: $(TARGET)
bitmaploctest: bitmaploctest.o bitmaploc.o file_lock.o
    $(CXX) -o $@ $^ $(LIB_FLAGS) $(LIB) $(C_FLAGS)
.cpp.o:
    $(CXX) -c -o $*.o $(INC) $(C_FLAGS) $*.cpp
.cc.o:
    $(CXX) -c -o $*.o ...

最后更新于 .

经常会用到gbk和utf8互转的情况,下面的代码就是实现了这样的功能,希望对大家有用~  

//GBK 2 UTF8
int API_Gbk2Utf8(const char *szSource, string &strDest)
{
    char szUniString[strlen(szSource)*2];
    int iLen = string_gbk2unicode(szSource, szUniString, strlen(szSource));
    unsigned char pTemp[4] = {0};
    unsigned short iTemp;
    char *pUTFString = (char *)malloc(sizeof(szUniString) *2+1);
    int pos=0;
    for (int i=0; i<iLen; i++)
    {
        iTemp =(((unsigned char)szUniString ...

最后更新于 .

在工作中,我们可能经常会用到压力测试等循环执行执行发包的机制,为了防止目标机压力过大,必然需要一个限速逻辑来进行控制,之前在网上看了看,发现基本没有这方面的介绍,于是自己写了一个。 这段代码使用了已经大半年,基本能够满足各种限速的要求,其中的动态调整逻辑也能够保证对限速本身对cpu的消耗不会太大,希望对大家有所帮助。(ps:这段代码是在linux下使用的,当然只需要将获取时间的函数改一下,那么在windows下也可以使用的,如果有朋友改了记得通知我一下哦~~)

#include <sys/time.h>
#include <stdio.h>
#include <math.h>
#include <iostream>
struct timeval tpstart,tpend;
int timeuse;
gettimeofday(&tpstart,NULL);
int countPerSec=0;//计算请求数
int statCount;//统计用
int iMaxReqPerSec=100;//最大限速
int trueMaxReq=iMaxReqPerSec;//动态调整的判定大小
while(1)
{
    //业务要做的事情 ...

最后更新于 .

远程登录服务器用vim在终端下编辑查看文件经常会遇见各种中文乱码问题。

做如下设置可基本解决vim中文乱码问题

首先查看系统对中文的支持

locale -a | grep zh_CN

输出样例如下

zh_CN.gbk zh_CN.utf8

vim 只能正确识别列表中的中文编码文件,如需识别其他编码类型的中文文件,则需要做系统升级

vi ~/.bash_profile 文件末尾添加

export LANG="zh_CN.UTF-8" 或者"en_US.UTF-8"

export LC_ALL="zh_CN.UTF-8"  或者"en_US.UTF-8"

vi ~/.vimrc 文件末尾添加

let &termencoding=&encoding

set fileencodings=utf-8,gbk,utf-16,big5

(这里是优先做了utf-8的模式判断,当然也可以优先做gbk,这里在我之前的文章里面都有讲)

修改SecureCRT设置 options->appearance  character encoding 改为utf-8

当然你也可以修改全局配置的appearance   options->global ...

最后更新于 .

有人在Quake III的源代码里面发现这么一段用来求平方根的代码:

float Q_rsqrt( float number )
{
	long i;
	float x2, y;
	const float threehalfs = 1.5F;
	x2 = number * 0.5F;
	y  = number;
	i  = * ( long * ) &y; // evil floating point bit level hacking
	i  = 0x5f3759df - ( i >> 1 ); // what the fuck?
	y  = * ( float * ) &i;
	y  = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
//	y  = y * ( threehalfs - ( x2 * y ...