1.4 计算机数据格式
成功的程序设计者需要清晰地理解数据格式。本节将详细说明许多通用计算机使用的数据格式,它们与Intel系列微处理器使用的数据格式一样。通常,数据以ASCII、Unicode、BCD、有符号和无符号整数,或者浮点数(实数)的形式出现。也可以使用其他格式,但是这里不予说明,因为它们不通用。
1.4.1 ASCII和Unicode数据
ASCII(American Standard Code for Information Interchange,美国标准信息交换码)数据表示计算机系统存储器中的字母数字符号,参见表1-8。标准ASCII码是7位代码,它的第8位,即***有效位,在某些已过时的系统中用于保存其奇偶性。如果ASCII数据用于打印机,则其***有效位为0时,进行字符打印;***有效位为1时,进行图形打印。在PC中,将逻辑1放在最左边的位上用于选择扩展的ASCII字符集。表1-9列出了使用代码80HFFH的扩展ASCII字符集。扩展的ASCII字符保存一些非英文字母和标点、希腊字符、算术字符、图框符及其他特殊字符。注意,扩展字符可能随打印机不同而不同。这个表提供的字符是为使用IBM ProPrinter打印机设计的,它也与某些字处理程序的专用字符集相匹配。
表1-8ASCII码
表1-9由IBM ProPrinter打印的扩展的ASCII码
ASCII控制符也列入了表1-8中,它们在计算机系统中实现控制功能,包括清除屏幕、退格、换行,等等。为了从计算机键盘输入控制码,键入字母时要按着Ctrl键。为得到控制码01H,键入Ctrl?A,为了得到02H,键入Ctrl?B,等等。注意,在DOS提示符下,控制代码出现在屏幕上,Ctrl?A显示为 ^A,Ctrl?B显示为 ^B,以此类推。还要注意,在许多现代键盘上回车码(CR)就是“回车”键。CR的作用是使光标或打印头返回到最左边。另一个在许多程序中都出现的代码是换行码(LF),它将光标下移一行。
为了使用表1-8或1?9将字符或控制字符转换成ASCII字符,首先定位那个要转换的字符,然后寻找十六进制ASCII码的***位数字,再找第二位数字。例如,大写字母A的ASCII码是41H,而小写字母a的ASCII码是61H。从Windows 95开始,许多基于Windows的应用使用单一码制(Unicode)存储字母数据。这里把每个字符存放成16位数据,代码0000H00FFH和标准ASCII码相同,其余的代码0100HFFFFH用于存放许多世界范围内采用的字符集构成的所有专用字符。这样,为Windows环境写的软件就可以在世界上许多国家内使用。
ASCII数据在存储器中存储时,通常用汇编程序的专用伪指令说明,这个伪指令称为“定义字节”(define byte)或DB(汇编程序是使用计算机本身的二进制机器语言编程的程序)。DB可以用单词BYTE取代。在
例1-18中给出了DB和BYTE伪指令,还给出了与ASCII码字符串一起使用的几个例子。注意,每个字符串如何用撇符(')括起来,千万不能用引号(”)。还要注意汇编程序将每个字符的ASCII码值列在了该字符串的左边。在最左边是十六进制存储器地址,这是存储在存储系统内的字符串的首地址。例如,字符串WHAT存在以001DH为起始地址的存储器内,并且先存储了***个字母57(W),接下来是68(H),以此类推。
例1-19表示使用Visual C++Express 2005和2008用String^字符串来定义同样的三个字符串,注意,Visual C++使用引号把字符串括起来。如果用C++较早期的版本,Microsoft Visual C++用CString定义串,而不用String^。符号^表示该串是存储管理无用单元搜集堆的成员。当目标可见性消失或从C++程序作用域中消失时,无用单元搜集清除存储系统(释放无用存储器),并且它还可以预防存储器泄漏。
【责任编辑:云霞 TEL:(010)68476606】
点赞 0