1.TortoiseSVN支持file///,http://,svn://三种协议访问。
2.sprintf中格式化double类型到字符串的规则
double a = 397.0054
sprintf(szTmp, "%3.2f", a); // szTmp = "397.01"
sprintf(szTmp, "%03.2f", a); // szTmp = "397.01"
sprintf(szTmp, "%04.2f", a); // szTmp = "397.01"
sprintf(szTmp, "%06.2f", a); // szTmp = "397.01"
sprintf(szTmp, "%07.2f", a); // szTmp = "0397.01"
只有当格式化的输入字符格式(sprintf的第二个参数)小数点前的数字大于double类型的变量的格式总长度(包括小数点)时,格式化后的字符串前面才会有“0”字符。格式串的小数点前表示总宽度。
2.utf-8是编码而不是字符集,unicode是字符集;gb2312既是字符集,又是编码。gb2312是unicode的子集,但是不排除在其他的(或者未来的)某种汉字字符集/编码里,有些字连unicode都没有收录。这种字就只有那种汉字编码方式,而没有utf-8的标准编码。这时,在一定的局部范围内,软件会使用unicode的私有部分临时和这些字关联,这样一来一方面便于那些基于Unicode的API来处理,另一方面也可以真的用utf-8编码了
4. 关于类8583通信报文方面的代码笔记:
4.1 压缩BCD码与非压缩BCD码的区别—— 压缩BCD码的每一位用4位二进制表示,一个字节表示两位十进制数。例如10010110B表示十进制数96D;非压缩BCD码用1个字节表示一位十进制数,高四位总是0000,低4位的0000~1001表示0~9.例如00001000B表示十进制数8,0000010100000110B是56的非压缩型BCD码. (简单地说:非压缩BCD一个字节存放一位十进制数,压缩BCD一个字节存放两位十进制数)。
4.2 域数据的填充:右补空格,左补零(RIGHT_SPACE, LEFT_ZERO),还有一种左靠右补零和右靠左补零。
4.3 ASC2BCD中的算法:数值向右移一位是除以2,向左移一位是乘以2;这个函数把字符"123456"转成数字:12,34,56(Byte Format)。这个函数把ASC字符串转成压缩BCD码;
4.4 BCD2ASC把BYTE串BYTE bcd[3] = {0x12, 0x34, 0x56} 转成了字符1, 2, 3, 4, 5, 6(Byte Format),这个函数的长度nLen应该是转换后的字节的个数。
5.数据库中可以建立复合主键,即多个字段同时作为主键。但这种情况表示每个字段都不能唯一,而不是这几个字段和起来唯一。
6.lambda是一种特殊的函数声明方式,它可以用来声明一个匿名函数,所谓的匿名函数是指没有函数名的函数。函数调用是可以直接调用lambda表达式返回的结果。一般lambda函数的声明方式:lambda 参数列表:表达式;
7.闭包(Closure)指携带着它们被定义所处的“环境”的函数。通俗的说法是函数里嵌套函数,并且子函数可以引用外函数定义的局部变量。
8.尽量用const和inline,而不是define。
无参的宏定义用const int MAXNUM = 500这种类型来代替;带参数的宏用inline内联函数来代替。使用const可以进行类型安全检查。
9.CDC中画笔的用法
CDC *pDC;
pDC = new CClientDC(this);
CPen pen(PS_SOLID, 1, RGB(255,0,0));
CPen *pOldPen = pDC->SelectObject(&pen);
pDC->SelectObject(pOldPen);
delete pDC;
10.VC++操作技巧
10.1 在资源编辑界面,CTRL+D设置控件焦点顺序。
10.2 WTL中模态对话框不需要继承CMessageFilter, CIdleHandler和重写PreTranslateMessage和OnIdle函数。
STL相关的知识
1. 最近刚开始使用STL中的容器,发现map中的元素在insert之后,会自动依key排序。我想问一下,各位高手,能不能让map的元素按照 insert的顺序排列,而不是自动的依key自动排序?
回答: 那就没必要用map了,用vector就行,vector中放pair 就行了。
WTL相关知识
1. 有些控件出现IsWindow断言,可能是没有将控件变量和控件ID关联起来,需要调用m_Text1.Attach(GetDlgItem(IDC_STATIC1))这样来绑定。注意:只有非模态的对话框才需要这么做,模态的对话框不需要加这行代码,直接可以像这样m_Text1.SetWindowText(...)使用。
2. 首先需要记住的是对话框必须是无模式的,因为CUpdateUI需要在程序的消息循环控制下工作。如果对话框是模式的,系统处理消息循环,我们程序的空闲处理函数就不会被调用,由于CUpdateUI是在空闲时间工作的,所以没有空闲处理就没有UI updating。
3. UIAddChildWindowContainer(),它告诉CUpdateUI我们的对话框含有需要Updating的子窗口。
零碎知识整理
1. _gcvt函数把flout/double型数据转成char型字符;
2. 编译Qt4.6.2的configure参数
configure -debug-and-release -platform win32-msvc2005 -opensource -fast -nomake examples -nomake demos -no-webkit
nmake confclean
3. socket中的timeval是指数据包的间隔时间,即:多长时间没有接受到数据,和文件大小没有关系。
4. fwrite的两个参数,count,1,一个是缓冲区大小,一个是缓冲区数量。
5. 介绍一下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。
6. 可以用命令行模式启动apache,并带上参数,apache会提示你哪句有误,然后就可以针对性的解决,命令如下: httpd.exe -w -n "Apache2" -k start
7. 有时即使使用了#pragma warning(disable: errnum)后还有警告,是因为把头文件放到预编译头中了,这种情况在使用STL中的或