公告

hello, world!

我最近发表的评论

白乔原创:程序员.. 回复
那个很凶的老头似乎就是你们电气的..
VC程序员的常见症.. 回复
VC++实现了C++语言并且对一些window..
白乔原创:程序员.. 回复
科协会员基本上都对计算机很感兴趣..
《Java程序员,上.. 回复
老谭的书估计没法超越,虽然他的书..
6.1.5  文本文件与二进制文件
文本文件与二进制文件实际上没有太大的区别,一般来讲,文本文件仅用来存储可打印字符(如:字母、数字、空格等),文本文件也可以以二进制方式打开,如图6-6所示的是在UltraEdit-32中以二进制的方式查看文本文件的情形。




 


(点击查看大图)图6-6  文本文件的二进制查看方式



文本与二进制的另外一种区别体现在人们的习惯:在文本模式中,当我们谈及"65"时,它一般指代字符串"65",如图6-7所示,"65"是2个字符,它们在二进制中显示成十六进制的"0x3635"。




 


(点击查看大图)图6-7  文本文件中的"65"



但是在二进制模式下,当我们谈及"65"时,那一般都指代数值65,如图6-8所示的数值65的二进制内容(在十六进制中,65表示成0x41),一旦我们切换到文本查看模式,它则对应于ASCII码中的"A"字符。




 


(点击查看大图)图6-8  二进制文件中的数值65




可以看出,文本格式和二进制格式还是有差别的。如果以文本方式写入"65",而以二进制文件读取的话,则会认为它的值为0x3635,这样,就会给软件程序带来致命的差错。
在Windows API世界里,根本就没有所谓的文本文件的读写函数,所有的缓冲内容的访问都是通过char *指针完成的,至于其内容是文本还是二进制,则是应用程序的责任了。
现在动手
编写如下程序,体验文本与二进制内容的存取操作。
【程序 6-2】文本与二进制内容的存储

 
01  #include "stdafx.h" 02  03  int main()  04  {  05      char s1[4] = "65";  06      int n1 = 65;  07  08      //写  09      CFile file;  10      file.Open(_T("test.out"), 
CFile::modeWrite | CFile::modeCreate);  11  12      //写入文本"65"  13      file.Write(s1, sizeof(s1));  14      //写入数值65  15      file.Write(&n1, sizeof(n1));  16  17      file.Close();  18  19      //读  20      file.Open(_T("test.out"), CFile::modeRead);  21      char s2[4];  22      int n2;  23  24      //先读文本,再读数值  25      file.Read(s2, sizeof(s2));  26      file.Read(&n2, sizeof(n2));  27  28      printf("s2=%s\r\n", s2);  29      printf("n2=%d\r\n", n2);  30  31      //先读数值,再读文本  32      file.SeekToBegin();  33      file.Read(&n2, sizeof(n2));  34      file.Read(s2, sizeof(s2));  35  36      printf("s2=%s\r\n", s2);  37      printf("n2=%d\r\n", n2);  38  39      file.Close();  40      return 0;02 } 
运行结果如图6-9所示。




2009-08-30 18:05:36
  简介
  WTL 在开发者之间的悄悄传播已经超过一年了, 传闻它是基于ATL的,并在微软内部使用.这理所当然的引起了ATL开发者社区的主意.这些人从ATL1.1开始,就一直为ATL控件书写UI代码,但是他们发现,他们的所写的代码常常就是纯的Win32 GDI代码.我告诉您, WTL并没有多大不同.
  是不是让人失望? 不,因为ATL只是对COM进行了简单的封装,这也是ATL的强大之处. 是的,写ATL您必须通晓COM. 您在ATL上额外花费的功夫跟您学习COM所作的努力比起来,简直微不足道.这跟那些需要把主要精力花费在学习类库本身,忽略COM的库是完全不同的.
  W..
第6章  使用文件存取对象
文件可以用来存储一张《清明上河图》,一曲《春江花月夜》,当然也可以存储一部《红楼梦》,文件的内容依赖于应用程序来解释。几乎所有的操作系统都通过文件的界面允许用户保存、管理数据。所以,我们理所当然把文件当做数据存取介质的第一选择。
6.1  文件操作的几种方式
操作计算机的人都会接触到文件,文件的操作通常包括文件的读取、修改,有的时候我们还需要对文件进行外部管理,包括文件复制、删除及属性设置等。
6.1.1  使用CRT函数std::fxxx()
文件操作可以采用C语言运行时期库来..
2009-08-19 08:28:27

目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。ASCII码适用于所有拉丁文字,它用7位二进制数进行编码(其最高位(bit7)被用做奇偶校验位),可以表示128个字符。
第0~32号及第127号(共34个)是控制字符或通信专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等。
第33~126号(共94个)是字符,其中第48~57号..
boost::lexical_cast为数值之间的转换(conversion)提供了一揽子方案,比如:将一个字符串"123"转换成整数123,代码如下:string s = "123";  int a = lexical_cast<int>(s); 
这种方法非常简单,笔者强烈建议大家忘掉std诸多的函数,直接使用boost:: lexical_cast。如果转换发生了意外,lexical_cast会抛出一个bad_lexical_cast异常,因此程序中需要对其进行捕捉。

现在动手
编写如下程序,体验如何使用boost:: lexical_cast完成数值转换。
【程序 4-11】使用boost:: lexical_cas..

自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。如图2-5所示的横坐标列出了从Visual C++ 1.0到Visual C++ 2008的历史版本。
与Visual C++一直伴随左右的两个术语是MFC与ATL,MFC是Microsoft Foundation Class,翻译过来就是“微软基础类”,什么意思呢?Windows作为一个提供功能强大的应用程序接口编程的操作系统,其API函数实在太多了,而且名称很乱,从零构架一个窗口动辄就是上百行的代码,传统的win32开发(直接使用Windows的接口函数API)对于程序员..

总算收到了春雨寄来的《把脉VC++》的样书,花费了2年的心血,总算有所收获,真的很高兴。总体来说,书的封面设计、彩页以及书的排版,感觉非常得当!这2年的辛苦,值!
贴一下《把脉VC++》的封面,大家共赏!
http://www.china-pub.com/195701

其中张贴的VC++技术脉络全图,出版社做成彩页,感觉比较好看!唯一有点遗憾的是,彩页反面罗列的软件快照,其中的一张PPMM显得太过轻慢,这个地方还是让我不是很舒服~
 
《把脉VC++》http://book.vcer.net/vcmap
年轻的时候,常常以程序员自诩,涓涓代码流于键盘之下,那是何等的满足!如今已过而立,随着小儿的出生,青涩自负的青春早已作古,现在的我在做什么呢?该做些什么呢?心里的头绪越来越多,终是忍不住上来与大家探讨探讨。
 
回想自己走过来的路程,10几年前,我在扬州城的一所大学里修学机械工程专业。直到大二,与计算机惟一相关的课程是一门《FORTRAN77 程序设计》,学工科的同仁们应该不会对ForTran感到陌生吧!这门苦涩的课程让一个香气袭人的女老师讲得一塌糊涂,然而我似懂非懂的认真学习了一个学期并通过了后来的省二级..
2009-08-10 14:14:46
4.1.7  POD对象
在C++中,我们把传统的C风格的struct叫做POD(Plain Old Data)对象。一般来说,POD对象应该满足如下特性。
对于POD类型T的对象,不管这个对象是否拥有类型T的有效值,如果将该对象的底层字节序列复制到一个字符数组(或者无符号字符数组)中,再将其复制回对象,那么该对象的值与原始值一样。
对于任意的POD类型T,如果两个T指针分别指向两个不同的对象obj1和obj2,如果用memcpy库函数把obj1的值复制到obj2,那么obj2将拥有与obj1相同的值。
简言之,针对POD对象,其二进制内容是可以随便复制的,在任何地方..
4.5.8  字符串的长度
字符串的长度通常是指字符串中包含字符的数目,但有的时候人们需要的是字符串所占字节的数目。常见的获取字符串长度的方法包括如下几种。
1.使用sizeof获取字符串长度
sizeof的含义很明确,它用以获取字符数组的字节数(当然包括结束符0)。对于ANSI字符串和UNICODE字符串,形式如下:sizeof(cs)/sizeof(char)  sizeof(ws)/sizeof(wchar_t) 
可以采用类似的方式,获取到其字符的数目。如果遇到MBCS,如"中文ABC",很显然,这种办法就无法奏效了,因为sizeof()并不知道哪个char是半个字符。
2...
 <<   1   2   3   >>   页数 ( 1/3 )