第2章学习笔记

原创 2006年05月25日 14:29:00
Diyinside  Community Academy Course (Beta)

Windows API Course(2)

目标:
1,解释计算机字符的历史和发展
2,解释ASCII,Extending ASCII,Double-Byte Character和Unicode区别和联系。
3,解释在C语言环境下宽字符编程
4,解释在Win32环境下宽字符编程

学习内容:
阅读<Programming Windows,Fifth Edition> Chapter 2


Learning WIN32 API Homework By citypw(Shawn Chang)

1,解释计算机字符的历史和发展
最早的计算机编码是从Hollerith卡发展而来,它由Herman Hollerith在1890年在美国人口普查中使用.Binary-Coded Decimal Interchange Code是基于Hollerith编码扩充的8-bit编码,但只使用于IBM的大型机.ASCII初步定稿是50年代末期,并在1967年完成.最后定位26个小写字母和26个大写字母,10个数字,32个符号和33个控制代码和一个空格.一共128个.ASCII不能很好的支持非英语之外的字符,所以之后出现了扩展ASCII,它是8-bit的编码.

2,解释ASCII,Extending ASCII,Double-Byte Character和Unicode区别和联系。
ASCII是7-bit编码,提供128个代码.26个小写字母和26个大写字母,10个数字,32个符号和33个控制代码和一个空格.
Extending ASCII是8-bit编码,提供256个代码.主要为一些欧洲国家的语言和符号最了填充.

Double-Byte Character,提供256个代码,前128个和ASCII一样(为了和ASCII兼容),较高的字节由2个字节一起.

Unicode,是一个纯16-bit的系统,可以提供65536个字符,这样可以表达世界上所有的文字和符号.

3,解释在C语言环境下宽字符编程
宽字符的C语言编程需要头文件<wchar.h> 宽字符类型wchar_t.
以下是一个实例程序:

#include <iostream>
#include <wchar.h>
#include <string>
using namespace std;
int main()
{
    char *p="CityPW";
    wchar_t *wp=L"CityPW";
    char a[]="CityPW";     //自动加上1个字符 '/0'
    wchar_t wa[]=L"CityPW";  //自动加上2个字符'/0'
   
    int i=strlen(p);
    int wi=wcslen(wp);
   
    cout<<"char指针的大小"<<sizeof(p)<<endl;
    cout<<"wide-char指针的大小"<<sizeof(wp)<<endl;
    cout<<"char数组的大小"<<sizeof(a)<<endl;
    cout<<"wide-char数组的大小"<<sizeof(wa)<<endl;
    cout<<"char长度是:"<<i<<endl;
    cout<<"wchar_t长度是:"<<wi<<endl;
    return 0;
}
4,解释在Win32环境下宽字符编程
WINDOWS NT/2K/XP/2003都从底层上支持Unicode,但Windows 98对Unicode的支持少了很多.在WIN32平台下进行宽字符方式编程主要要明白当我们调用一些API例如MessageBox()的时候,它在背后是怎么运行的.
#ifdef UNICODE //如果定义了Unicode
#define MessageBox  MessageBoxW  //就采用宽字符的API-MessageBoxW
#else
#define MessageBox  MessageBoxA  //否则采用ASCII的MessageBoxA
#endif
但用Unicode定义的不一定能在windows 98的机器上运行.
比如MessageBoxA(NULL,TEXT("您好"),TEXT("是"),0)这样写就会报错.

编写一个程序可以自动统计UNICODE和ASCII字符个数,方法和工具不限:
#include <iostream>
#include <string>
using namespace std;
int main()
{
    char p[10];
    cin>>p;
    unsigned int uiAsciiC=0,uiUnicodeC=0;  //uiAsciiC统计ASCII字符数,uiUnicodeC统计UNICODE数
    for(int i=0;i<strlen(p);i++)
    {
        int temp=p[i];        //换成ASCII码进行比较
        if(temp>0 && 128>temp)
            uiAsciiC++;
        else
            uiUnicodeC++;
    }
    cout<<"ASCII:"<<uiAsciiC<<endl;
    cout<<"UNICODE:"<<uiUnicodeC/2<<endl;
}

                                                          id:CityPW
                                                          Shawn Chang
                                                          http://blog.csdn.net/raiden56

《TCP/IP详解》学习笔记-第2章 链路层

数据链路层有三个目的:(1)为IP模块发送和 接收IP数据报。 (2)为ARP模块发送ARP请求和接收ARP应答。 (3)为RARP发送RARP请 求和接收RARP应答。ARP叫做地址解析协议,是用I...
  • will130
  • will130
  • 2016年05月11日 09:01
  • 4821

[学习笔记][Java编程思想]第2章:一切都是对象

Java是基于C++的。 Java是混合型语言。Java程序先编译成字节码,然后再通过JVM解释执行。 Java只能进行面向对象的程序设计(OOP)。 1 用引用操作对象 Java中一切被视为对象,操...

算法导论学习笔记 第2章 算法基础

本章介绍了一个贯穿本书的框架,后续的算法设计都是在这个框架中进行的。...

第2章-1 利用Python进行数据分 学习笔记

跨行自学python,找个地方记下笔记。 #!-*-coding:utf-8-*- import json path = "C:\Python learn\pydata-book-master\ch0...
  • nightvv
  • nightvv
  • 2016年12月25日 20:12
  • 99

【C++ Primer学习笔记】第2章:变量和基本类型

类型是所有程序的基础。类型告诉我们数据代表什么意思以及可以对数据执行哪些操作。 C++中对类型的支持是非常广泛的:语言自身定义了一组基础类型和修改已有类型的方法,还提供了一组特征用于自定义类型。...

《统计学习方法》李航_学习笔记_第2章_感知机

**第2章 感知机** 感知机(perception)是一种二类分类的线性分类模型 输入:实例的特征向量 输出:实例的类别(+1,-1) 感知机:输入空间中将实例划分为正负两类的分离超平面,属...

学习笔记:第2章 操作系统基础知识

1、PV操作是实现进程同步与互斥的常用方法。P操作和V操作是低级通信原语,在执行期间不可分割。其中,P操作表示申请一个资源,V操作表示释放一个资源。 2、进程推进顺序不当、同类资源分配不当、PV使用...

Android编程权威指南(第二版)学习笔记(二)—— 第2章 Android 与 MVC 设计模式

本章扩展了 GeoQuiz 程序,并介绍了 MVC 设计模式
  • kniost
  • kniost
  • 2016年10月06日 17:53
  • 441

Unity Shader入门精要学习笔记 - 第2章 渲染流水线

2.1 综述 渲染流水线的最终目的在于生成或者说是渲染一张二维纹理,即我们在电脑屏幕上看到的所有效果。它的输入是一个虚拟摄像机、一些光源、一些Shader以及纹理等。 渲染流程分成3个阶段:应用阶...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第2章学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)