�������� Linux Tags

2. Unicode���

�ڵ�һ���У����Ѿ�Ԥ�棬C��������Microsoft Windows��ʽ����а�������Ҫ��ɫ���κβ��ֶ��ὲ��������Ҳ���ڴ�ͳ����ģʽ��ʽ����л���δ��������Щ���⡣����Ԫ����Unicode���������������⡣

�򵥵�˵��Unicode��չ��ASCII��Ԫ�������ϸ��ASCII�У�ÿ����Ԫ��7λԪ��ʾ�����ߵ������ձ�ʹ�õ�ÿ��Ԫ��8λԪ������Unicodeʹ��ȫ16λԪ��Ԫ������ʹ��Unicode�ܹ���ʾ���������е���д�����п�����춵���ͨѶ����Ԫ���������ֺ��������š�Unicode���������ΪASCII�IJ��䣬���ܵĻ������ս������������ǵ�ASCII�ǵ��������֧���λ�ı�׼���������ȷ��һ���ܸߵ�Ŀ�ꡣ

UnicodeӰ�쵽�˵��Թ�ҵ��ÿ�����֣���Ҳ�������ҵϵͳ�ͳ�ʽ������Ե�Ӱ����󡣴��ⷽ�������������Ѿ���·�ˡ�Windows NT�ӵײ�֧ԮUnicode�����ҵ��ǣ�Windows 98ֻ��С����֧ԮUnicode�������켴��ANSI������C��ʽ�������ͨ���Կ���Ԫ����֧Ԯ��֧ԮUnicode�����潫��ϸ������Щ���ݡ�

��Ȼ����Ϊ��ʽд���ߣ�����ͨ����������෱�صĹ�����������ͼ͸��ʹ�����е����г�ʽ��Unicode���������Ḻ�����京����������¶�Unicode�����۶�����������

��Ԫ����ʷ
��

��Ȼ����ȷ�����࿪ʼ������ʱ�䣬����д���д�Լ6000�����ʷ�ˡ�ʵ���ϣ�������д���������������֡�ÿ����Ԫ����Ӧ춷�������ĸ�������춴�Լ3000��ǰ����Ȼ���ǹ�ȥʹ�õĶ�����д���Զ��õúúõģ���19���͵ļ��������߻��ǿ����˸��������Samuel F. B. Morse��1838�굽1854��䷢���˵籨����ʱ����������һ�ֵ籨��ʹ�õĴ��롣��ĸ���е�ÿ����Ԫ��Ӧ�һϵ�ж̵ĺͳ������壨������ۺţ�����Ȼ���д�Сд��ĸ֮��û�����𣬵����ֺͱ����Ŷ������Լ��Ĵ��롣

Morse���벢����������ͼ���Ļ�ӡˢ������������������д���Եĵ�һ�����ӡ�1821�굽1824��֮�䣬�����Louis Braille�ܵ���ҹ���д��Ѷ�ľ���ϵͳ��������������һ�ִ��룬����ֽ��ͻ��ĵ���Ϊ����������ä���Ķ���Braille����ʵ������һ��6λԪ���룬������Ԫ��������ĸ��ϡ����õ��ֺͱ����б��롣һ�������escape�����ʾ��������Ԫ����Ӧ����Ϊ��д��һ�������shift���������������뱻����Ϊ���֡�

Telex���룬����Baudot ����һ����������ʦ�������ù���ʦ����1903�꣩�Լ�һ�ֱ���ΪCCITT #2�Ĵ��루1931�걻��׼���������ǰ�����Ԫ�����ֵ�5λԪ���롣

������׼
��

���ڵ��Ե���Ԫ���Ǵ�Hollerith��Ƭ���ųƲ��ܱ��۵�����������ˣ���չ�����ģ��ÿ�Ƭ��Herman Hollerith�������״���1890��������˿��ղ���ʹ�á�6λԪ��Ԫ��ϵͳBCDIC��Binary-Coded Decimal Interchange Code������λ����ʮ��λ�������룩Դ��Hollerith���룬��60�������չΪ8λԪEBCDIC����һֱ��IBM���������ı�׼����ûʹ���������ط���

������Ѷ������׼�루ASCII��American Standard Code for Information Interchange����ʼ�50������ڣ���������1967�ꡣ����ASCII�Ĺ����У�����Ԫ������6λԪ��7λԪ����8λԪ�������ϲ����˺ܴ�����顣�ӿɿ��ԵĹ۵�������Ӧʹ���滻��Ԫ�����ASCII������6λԪ���룬����춷��õ�ԭ��Ҳ�ų���8λԪ�汾�ķ�������ʱÿλԪ�Ĵ���ռ�ɱ��Ժܰ��󣩡����������յ���Ԫ�����26��Сд��ĸ��26����д��ĸ��10�����֡�32�����š�33�����ź�һ���ո��ܹ�128����Ԫ�롣ASCII���ڼ�¼��ANSI X3.4-1986��Ԫ���������Ѷ������7λԪ�������ұ�׼�루7-Bit ASCII��7-Bit American National Standard Code for Information Interchange�������������ұ�׼Э�ᣨAmerican National Standards Institute��������ͼ2-1����ʾ��ASCII��Ԫ����ANSI�ļ��еĸ�ʽ���ơ�

ASCII�������ŵ㡣���磬26����ĸ�����������ģ���EBCDIC�����оͲ��������ģ�����д��ĸ��Сд��ĸ��ͨ���ı�һλԪ���϶��໥ת����10����λ�Ĵ���ɴ���ֵ��������صõ�����BCDIC�����У���Ԫ��0���ı�������Ԫ��9�������棡��

������ǣ�ASCII��һ���dz��ɿ��ı�׼���ڼ��̡���Ѷ��ʾ����ϵͳӲ�塢ӡ���������嵵������ҵϵͳ��Internet�ϣ�������׼������ASCII�����ж��Ҹ���ٹ̡�

       0-     1-     2-     3-     4-     5-     6-     7-
-0     NUL    DLE    SP     0      @      P      `      p
-1     SOH    DC1    !      1      A      Q      a      q
-2     STX    DC2    "      2      B      R      b      r
-3     ETX    DC3    #      3      C      S      c      s
-4     EOT    DC4    $      4      D      T      d      t
-5     ENQ    NAK    %      5      E      U      e      u
-6     ACK    SYN    &      6      F      V      f      v
-7     BEL    ETB    '      7      G      W      g      w
-8     BS     CAN    (      8      H      X      h      x
-9     HT     EM     )      9      I      Y      I      y
-A     LF     SUB    *      :      J      Z      j      z
-B     VT     ESC    +      ;      K      [      k      {
-C     FF     FS     ,      <      L      \      l      |
-D     CR     GS     -      =      M      ]      m      }
-E     SO     RS     .      >      N      ^      n      ~
-F     SI     US     /      ?      O      _      o      DEL
ͼ2-1 ASCII��Ԫ��

���ʷ���
��

ASCII�����������Ǹ���д�ĵ�һ����ĸ��ASCII��һ��������������׼��������������������������Ӣ����ҵ���Ҫ������Ӣ����Ӣ�����ţ��꣩�����

Ӣ��ʹ������������������ĸ������ʹ����������ĸ������д�����У�Ӣ���еĵ���ͨ��������Ҫ�������ţ���������ţ�����ʹ��Щ��ͳ�������϶�������Ҳ�޲�����Ӣ�ﵥ�֣�����cöoperate����résumé��ƴд��û�ж�������Ҳ�ᱻ��ȫ���ܡ�

�����������ϡ��Ա����Լ������������������ң���������ʹ�ö������ź��ձ顣��Щ�������������Ϊʹ������ĸ���ʺ���Щ���Զ�����ͬ����Ҫ����Զ������ŷ���ϲ����Σ���������������ʹ��������ĸ�����ԣ�����ϣ���ϣ�������������Ͷ��ʹ��˹������ĸ��������������ߵø�Զ���ͻᷢ���й����κ��֣��ձ��ͳ���Ҳ���ú���ϵͳ��

ASCII����ʷ��ʼ�1967�꣬��������Ҫ����춿˷������������Ը��ʺ�춷�����Ӣ����������ԡ����磬1967�꣬���ʱ�׼����֯��ISO��International Standards Organization���Ƽ�һ��ASCII�ı��֣�����0x40��0x5B��0x5C��0x5D��0x7B��0x7C��0x7D��Ϊ����ʹ�ñ�������������0x5E��0x60��0x7E��Ϊ��������Ҫ���������Ԫ��Ҫ8��9��10���ռ�λ��ʱ�����������ͼ�η��š�������Ȼ����һ����ѵĹ��ʽ����������Ϊ�Ⲣ���ܱ�֤һ���ԡ�����ȴ��ʾ����������뾡�취Ϊ��ͬ������������ġ�

��չASCII
��

��С�͵��Կ����ij��ڣ����Ѿ��ϸ�ؽ�����8λԪλԪ�顣��ˣ����ʹ��һ��λԪ����������Ԫ������Ҫ128�����ӵ���Ԫ������ASCII��1981�꣬�������IBM PC�Ƴ�ʱ����Ѷ����ROM������һ���ṩ256����Ԫ����Ԫ������Ҳ��ΪIBM��׼��һ����Ҫ��ɲ��֡�

�����IBM��չ��Ԫ������ijЩ����������Ԫ��һ��Сдϣ����ĸ��������ѧ�����зdz����ã���������һЩ���ͺ���״ͼ����Ԫ�����ӵ���ԪҲ�����ӵ�ASCII������Ԫ�ı���λ�ã�������Ϊ�����������Ԫ������������ʾ�õġ�

��IBM��չ��Ԫ�����ս�������ʾ����ӡ������ROM�У���������Ӧ�ó�ʽ�������������ģʽ����ʾ��ʽ������������Ԫ����û��Ϊ����ʹ��������ĸ������ŷ�����ṩ�㹻��Ĵ�������Ԫ������Ҳ�������Windows��Windows����Ҫͼ����Ԫ����Ϊ����һ����ȫͼ�λ���ϵͳ��

��Windows 1.0��1985��11�·��У��У�Microsoftû����ȫ����IBM��չ��Ԫ�����������˾ӵڶ���Ҫλ�á���Ϊ��ѭ��ANSI�ݰ���ISO��׼����Windows��Ԫ����������ANSI��Ԫ������ ANSI�ݰ���ISO��׼���ճ�ΪANSI/ISO 8859-1-1987������American National Standard for Information Processing-8-Bit Single-Byte Coded Graphic Character Sets-Part 1: Latin Alphabet No 1����ͨ��Ҳ��дΪ��Latin 1����

��Windows 1.0�ġ�Programmer's Reference����ӡ����ANSI��Ԫ��������汾����ͼ2-2��ʾ��

0-  1-  2-  3-  4-  5-  6-  7-  8-  9-  A-  B-  C-  D-  E-  F-
-0 * * 0 @ P ` p * * ° À Ð à ð
-1 * * ! 1 A Q a q * * ¡ ± Á Ñ á ñ
-2 * * " 2 B R b r * * ¢ ² Â ò â ò
-3 * * # 3 C S c s * * £ ³ Ã ó ã ó
-4 * * $ 4 D T d t * * ¤ ´ Ä ô ä ô
-5 * * % 5 E U e u * * ¥ µ Å õ å õ
-6 * * & 6 F V f v * * ¦ ¶ Æ ö æ ö
-7 * * ' 7 G W g w * * § · Ç * ç *
-8 * * ( 8 H * h * * * ¨ ¸ È ø è ø
-9 * * ) 9 I Y I y * * © ¹ É Ù é ù
-A * * * : J Z j z * * ª º Ê Ú ê ú
-B * * + ; K [ k { * * « » Ë Û ë û
-C * * , < L \ l | * * ¬ ¼ Ì Ü ì ü
-D * * - = M ] m } * * ­ ½ Í Ý í ý
-E * * . > N ^ n ~ * * ® ¾ Î Þ î þ
-F * * / ? * _ o DEL * * ¯ ¿ Ï ß ï ÿ

* - not applicable

ͼ2-2 Windows ANSI��Ԫ�������ANSI/ISO 8859-1��

�շ����ʾ��λ��δ������Ԫ������ANSI/ISO 8859-1�����ն���һ�¡�ANSI/ISO 8859-1����ʾ��ͼ����Ԫ����û�п�����Ԫ�����û�ж���DEL�����⣬����0xA0����Ϊһ���ǶϿ��Ŀո�����ζ���ڱ��Ÿ�ʽʱ������Ԫ����춶Ͽ�һ�У�������0xAD��һ��������Ԫ����ʾ��������β�Ͽ�����ʱʹ�ã�������ʾ�������⣬ANSI/ISO 8859-1������0xD7����Ϊ�˺ţ�*����0xF7Ϊ���ţ�/����Windows�е�ijЩ����Ҳ�����˴�0x80��0x9F��ijЩ��Ԫ������Щ����ANSI/ISO 8859-1��׼��һ���֡�

MS-DOS 3.3��1987��4�·��У���IBM PC�û��������������code page���ĸ��WindowsҲʹ�ô˸���������������Ԫ��ӳ����롣�����IBM��Ԫ�������������437�����ߡ�MS-DOS Latin US���������850���ǡ�MS-DOS Latin 1�������ø��ӵĴ�������ĸ���� ï¿½ï¿½ï¿½ï¿½ Í¼2-2��ʾ��Latin 1 ISO/ANSI��׼��������һЩ������Ԫ��������������������Զ��塣��͵�128������������ͬ�ģ��ϸߵ�128������ȡ��춶�������������ԡ�

��MS-DOS�У�����û�ΪPC�ļ��̡���ʾ����ӡ����ָ����һ���������Ȼ����PC�ϴ������༭����ӡ�ļ���һ�ж���������ÿ���¶��ᱣ��һ�¡�Ȼ��������û���ͼ��ʹ�ò�ͬ��������û����������������ڻ����ϸı���������ͻ�������⡣��Ԫ����������Ԫ�������Ӧ�ó�ʽ�ܹ����������Ѷ���ļ�һ�𱣴�����ͼ��������IJ��������ò��԰�����ijЩ���������ת���Ĺ�����

��Ȼ�����������ṩ�˲�����������������ĸ�ĸ���������Ԫ����������������Ľϸߵ�128����Ԫ���ǰ����������ķ�������ĸ������ϣ�����ϣ�����˹�������Ȼ����˶����ᵼ���������û��ң������������������ĸδ��ȷ��ʾ����ô�������ֱ����Ҳ����������Ķ���

���������չ���ǻ��������Щԭ�򣬵��ǻ�������˹�������MS-DOS�����855��˹�������Windows�����1251�Լ�˹�������Macintosh�����10007��ͬ��ÿ�������µ���������ǶԸû��������ı�׼��Ԫ��������IBM OS/2Ҳ֧Ԯ����EBCDIC�������

����һ�£���ᷢ�������ø���⡣

˫λԪ����Ԫ��
��

����Ϊֹ�������Ѿ�������256����Ԫ����Ԫ�������й����ձ��ͺ������������ַ����д�Լ21,000�������������Щ���Զ��Ա��ֺ�ASCII��ij���������أ�

���������������˵����ȷ�Ļ�����˫λԪ����Ԫ����DBCS��double-byte character set����DBCS��256���뿪ʼ������ASCIIһ�������κ���Ϊ���õ������һ���������128��������ASCII��Ȼ�����ϸߵ�128�������е�ijЩ���Ǹ������ڶ���λԪ�顣������λԪ��һ�𣨳�����λԪ��͸���λԪ�飩����һ����Ԫ��ͨ����һ�����ӵ��������֡�

��Ȼ���ġ����ĺͺ��Ĺ���һЩ��ͬ���������֣�����Ȼ�����������Dz�ͬ�ģ����Ҿ�����ͬһ���������������ֲ�ͬ�������д���������ͬ���¡�Windows֧Ԯ�ĸ���ͬ��˫λԪ����Ԫ���������932�����ģ���936���������ģ���949�������950�����庺�֣���ֻ��Ϊ��Щ���ң�������������Windows�汾��֧ԮDBCS��

˫��Ԫ�����Ⲣ����˵��Ԫ������λԪ��������������һЩ��Ԫ���ر���ASCII��Ԫ����1��λԪ���ʾ��������𸽼ӵij�ʽ������⡣���磬�ִ��е���Ԫ���������ִ���λԪ�������������������ִ��������䳤�ȣ����ұ�����ÿ��λԪ����ȷ�����Ƿ�Ϊ˫λԪ����Ԫ����λԪ�顣�����һ��ָ��DBCS�ִ��м��ָ�꣬��ô���ִ�ǰһ����Ԫ��λַ��ʲô�أ����õĽ�������Ǵӿ�ʼ��ָ��������ִ���

Unicode�������
��

�������ٵĻ��������������ϵ���д���Բ��ܼ򵥵���256��8λԪ�����ʾ����ǰ�Ľ�����������������DBCS�ѱ�֤���Dz���������Ҫ�ģ�����Ҳ�DZ�׾�ġ���ʲô���������Ľ�������أ�

��Ϊ��ʽд���ߣ����Ǿ������������⡣�������̫�࣬��8λԪ��ֵ�Ѿ����ܱ�ʾ����ô���Ǿ��Ը�����ֵ������16λԪֵ�����������Ȥ�ģ�����Unicode���ƶ���ԭ������ҵ�256����Ԫ����ӳ�䣬�Լ�����һЩ1λԪ������һЩ2λԪ������˫λԪ����Ԫ����ͬ��Unicode��ͳһ��16λԪϵͳ��������������ʾ65,536����Ԫ����Ա�ʾ������Ԫ��������ʹ���������ֵ����ԣ�����һϵ�е���ѧ�����źͻ��ҵ�λ���ŵļ�����˵�dz�ԣ�ġ�

����Unicode��DBCS֮����������Ҫ��Unicodeʹ�ã��ر���C��ʽ������Ի����������Ԫ��������Unicode�е�ÿ����Ԫ����16λԪ��������8λԪ��������Unicode�У�û�е���ʹ��8λԪ��ֵ��������ڡ����֮�£���˫λԪ����Ԫ����������Ȼ����8λԪ��ֵ����ЩλԪ������������Ԫ����ijЩλԪ������ʾ��Ҫ����һ��λԪ�鹲ͬ����һ����Ԫ��

����DBCS�ִ��dz����ң����Ǵ���Unicode��������������������֡���Ҳ������˵�֪��ǰ128��Unicode��Ԫ��16λԪ�����0x0000��0x007F������ASCII��Ԫ������������128��Unicode��Ԫ�������0x0080��0x00FF����ISO 8859-1��ASCII����չ��Unicode�в�ͬ���ֵ���Ԫ��ͬ��������еı�׼������Ϊ�˱��ת����ϣ����ĸ��ʹ�ô�0x0370��0x03FF�Ĵ��룬˹������ʹ�ô�0x0400��0x04FF�Ĵ��룬����ʹ�ô�0x0530��0x058F�Ĵ��룬ϣ������ʹ�ô�0x0590��0x05FF�Ĵ��롣�й����ձ��ͺ������������֣��ܳ�ΪCJK��ռ���˴�0x3000��0x9FFF�Ĵ��롣

Unicode�����ô�������ֻ��һ����Ԫ����û��һ�㺬����Unicodeʵ�����Ǹ��˵�����ҵ�м���ÿ����Ҫ��˾��ͬ�����Ľ������������ISO 10646-1��׼�еĴ�����һһ��Ӧ�ġ�Unicode����Ҫ�ο������ǡ�The Unicode Standard��Version 2.0����Addison-Wesley�����磬1996�꣩������һ���ر���飬���������ļ����еķ�ʽ��ʾ����������д���Եķḻ�ԺͶ����ԡ����⣬���黹�ṩ�˿���Unicode�Ļ���ԭ����ϸ�ڡ�

Unicode��ȱ���𣿵�Ȼ�С�Unicode�ִ�ռ�õļ�������ASCII�ִ�����������Ȼ��ѹ����������춼���ؼ��ٵ�����ռ�Ĵŵ��ռ䡣����Ҳ�������ȱ���ǣ����������˵����ϰ��ʹ��Unicode����Ϊ��ʽд���ߣ���������ǵĹ�����

����Ԫ��C
��

��C��ʽд������˵��16λԪ��Ԫ���뷨��ȷ����ɨ�ˡ�һ��char��һ��λԪ��ͬ�������ȷ��������֮һ��û������ʽд�������ANSI/ISO 9899-1990�����ǡ��������ұ�׼��ʽ������ԣ�C����Ҳ������ANSI C����ͨ��һ������������Ԫ���ĸ�����֧Ԯ�ö��λԪ�����һ��Ԫ����Ԫ������Щ����Ԫ�볣�õ���Ԫ�����ع��档

ANSI CҲ֧Ԯ��λԪ����Ԫ�����������ġ����ĺͺ��İ汾Windows֧Ԯ����Ԫ����Ȼ������Щ��λԪ����Ԫ�������ɵ�λԪ�鹹�ɵ��ִ�������ֻ��������һЩ��Ԫ�ı���������Ԫ�ĺ�����ѡ���λԪ����Ԫ����ҪӰ��C���Գ�ʽִ��ʱ�ڳ�ʽ�⺯ʽ�����֮�£�����Ԫ��������Ԫ�������һ�����һЩ�������⡣

����Ԫ����Ҫ��Unicode��Unicode��һ�ֿ��ܵĿ���Ԫ����Ȼ������Ϊ����Ľ�����Windows������Cִ�е����ۣ������ҽ��ѿ���Ԫ��Unicode��Ϊͬ���

char������̬
��

�ٶ����Ƕ��dz���Ϥ��C��ʽ��ʹ��char������̬������ʹ�����Ԫ���ִ�����Ϊ�˱������C��δ�������Ԫ���������Ȼع�һ�¿�����Win32��ʽ�г��ֵı�׼��Ԫ���塣

�������䶨�岢��ʼ����һ��ֻ����һ����Ԫ�ı�����

char c = 'A' ;

����c��Ҫ1��λԪ�������棬������ʮ����λ��0x41��ʼ����������ĸA��ASCII���롣

����������������һ��ָ���ִ���ָ�꣺

char * p ;

��ΪWindows��һ��32λԪ��ҵϵͳ������ָ�����p��Ҫ��4��λԪ�鱣�档�����ɳ�ʼ��һ��ָ���ִ���ָ�꣺

char * p = "Hello!" ;

��ǰ��һ��������pҲ��Ҫ��4��λԪ�鱣�档���ִ������ھ�̬�������в�ռ��7��λԪ�飭6��λԪ�鱣���ִ�����1��λԪ�鱣����ֹ����0��

��������������������Ԫ���У�

char a[10] ;

����������£�������Ϊ�����б�����10��λԪ��Ĵ���ռ䡣����ʽsizeof��a�� ������10���������������������������к�ʽ�ⶨ�壩������ʹ����������������ʼ��һ����Ԫ���У�

char a[] = "Hello!" ;

������������ж���Ϊһ����ʽ���������������뽫������Ϊһ��static���������£�

static char a[] = "Hello!" ;

��������������ִ��������ھ�̬��ʽ�������У�����ĩβ����0����������Ҫ7��λԪ��Ĵ���ռ䡣

����Ԫ
��

Unicode���߿���Ԫ��û�иı�char������̬��C�еĺ��塣char������ʾ1��λԪ��Ĵ���ռ䣬 sizeof ��char�� ��������1�������ϣ�C��1��λԪ��ɱ�8λԪ�����������Ǵ��������˵��1��λԪ�飨Ҳ����1��char����8λԪ����

C�еĿ���Ԫ���wchar_t������̬�����ڼ�����ͷ��������WCHAR.H�ж��ж��壬��������

typedef unsigned short wchar_t ;

��ˣ�wchar_t������̬���޷��Ŷ�������̬��ͬ������16λԪ����

Ҫ�������һ������Ԫ�ı�������ʹ���������䣺

wchar_t c = 'A' ;

����c��һ��˫λԪ��ֵ0x0041����Unicode��ʾ����ĸA����Ȼ������ΪIntel΢����������С��λԪ�鿪ʼ�����λԪ����ֵ����λԪ��ʵ��������0x41��0x00��˳�򱣴��ڼ������С�������Unicode���ֵĵ��Դ���Ӧע����һ�㡣��

�����ɶ���ָ����ִ���ָ�꣺

wchar_t * p = L"Hello!" ;

ע������ڵ�һ������ǰ��Ĵ�д��ĸL��������long�������⽫���߱��������ִ�������Ԫ���棭��ÿ����Ԫռ��2��λԪ�顣ͨ����ָ�����pҪռ��4��λԪ�飬���ִ�������Ҫ14��λԪ�飭ÿ����Ԫ��Ҫ2��λԪ�飬ĩβ��0����Ҫ2��λԪ�顣

ͬ���������������������䶨�����Ԫ���У�

static wchar_t a[] = L"Hello!" ;

���ִ�Ҳ��Ҫ14��λԪ��Ĵ���ռ䣬sizeof (a) ������14����������a�ɵõ���������Ԫ��a[1] ��ֵ�ǿ���Ԫ��e��������0x0065��

��Ȼ����ȥ����һ��ӡˢ���ţ�����һ������ǰ���L�dz���Ҫ����������������֮�����û�пո�ֻ�д���L����������֪������Ҫ���ִ���Ϊÿ����Ԫ2λԪ�顣���ᣬ�����ǿ���ʹ�ÿ��ִ������DZ�������ʱ��������������һ������ǰ���L�����˵��ǣ���������˰���L��C������ͨ������������������Ѷ��

�������ڵ�����Ԫ����ǰ��ʹ��L���ף�����ʾ����Ӧ����Ϊ����Ԫ��������ʾ��

wchar_t c = L'A' ;

��ͨ�����Dz���Ҫ�ģ�C��������Ը���Ԫ�������䣬ʹ����Ϊ����Ԫ��

����Ԫ��ʽ�⺯ʽ
��

���Ƕ�֪����λ���ִ��ij��ȡ����磬��������Ѿ�����������������һ���ִ�ָ�꣺

char * pc = "Hello!" ;

���ǿ��Ժ���

iLength = strlen (pc) ;

��ʱ����iLength�����6��Ҳ�����ִ��е���Ԫ����

̫���ˣ�������������������һ��ָ�����Ԫ��ָ�꣺

wchar_t * pw = L"Hello!" ;

�ٴκ���strlen ��

iLength = strlen (pw) ;

�����鷳���ˡ����ȣ�C����������ʾһ��������Ϣ�����������������ݣ�

'function' : incompatible types - from 'unsigned short *' to 'const char *'

������Ϣ����˼�ǣ�����strlen��ʽʱ���ú�ʽӦ����char���͵�ָ�꣬��������ȴ������һ��unsigned short���͵�ָ�ꡣ����Ȼ�ɱ��벢ִ�иó�ʽ�������ᷢ��iLength���1��Ϊʲô��

�ִ���Hello!���е�6����Ԫռ��16λԪ��

0x0048 0x0065 0x006C 0x006C 0x006F 0x0021

Intel�������ڼ������н����Ϊ��

48 00 65 00 6C 00 6C 00 6F 00 21 00

�ٶ�strlen��ʽ����ͼ�õ�һ���ִ��ij��ȣ����ѵ�1��λԪ����Ϊ��Ԫ��ʼ�������������ٶ������һ��λԪ����0�����ʾ�ִ�������

���С��ϰ�����˵����C���Ա�����ִ��ʱ�ڳ�ʽ�⺯ʽ֮������𡣱��������ִ�L"Hello!" ����Ϊһ��16λԪ��������̬���ϣ������䱣����wchar_t�����С�����������������������sizeof�������������Щ����������������������ʱ������ִ��ʱ�ڳ�ʽ�⺯ʽ������strlen����Щ��ʽ��Ϊ�ִ��ɵ�λԪ����Ԫ��ɡ��������ִ�ʱ����ʽ�Ͳ���������ϣ������ִ���ˡ�

������Ҫ˵�����ޣ�̫�鷳�ˣ�������ÿ��C���Գ�ʽ�⺯ʽ��������д�Խ��ܿ���Ԫ������ʵ�ϲ�����ÿ��C���Գ�ʽ�⺯ʽ����Ҫ��д��ֻ����Щ���ִ������ĺ�ʽ����Ҫ��д������Ҳ������������ɡ������Ѿ���д���ˡ�

strlen��ʽ�Ŀ���Ԫ����wcslen��wide-character string length�����ִ����ȣ���������STRING.H������Ҳ˵����strlen����WCHAR.H�о���˵����strlen��ʽ˵�����£�

size_t __cdecl strlen (const char *) ;

��wcslen��ʽ��˵�����£�

size_t __cdecl wcslen (const wchar_t *) ;

��ʱ����֪����Ҫ�õ����ִ��ij��ȿ��Ժ���

iLength = wcslen (pw) ;

��ʽ�������ִ��е���Ԫ��6�����ס���ijɿ�λԪ���ᣬ�ִ�����Ԫ���Ȳ��ı䣬ֻ��λԪ�鳤�ȸı��ˡ�

����Ϥ�����д����ִ�������Cִ��ʱ�ڳ�ʽ�⺯ʽ���п���Ԫ�档���磬wprintf��printf�Ŀ���Ԫ�档��Щ��ʽ��WCHAR.H�ͺ��б�׼��ʽ˵���ı�ͷ������˵����

ά����һԭʼ��
��

��Ȼ��ʹ��UnicodeҲ��ȱ�㡣��һ��Ҳ������Ҫ��һ���ǣ���ʽ�е�ÿ���ִ�����ռ�������Ĵ���ռ䡣���⣬�������ֿ���Ԫִ��ʱ�ڳ�ʽ���еĺ�ʽ�ȳ���ĺ�ʽ�󡣳�����ԭ����Ҳ���뽨�������汾�ij�ʽ��һ������ASCII�ִ�����һ������Unicode�ִ�����õĽ���취��ά�����ܰ�ASCII�������ܰ�Unicode����ĵ�һԭʼ�뵵����

��Ȼֻ��һС�γ�ʽ�������ִ��ʱ�ڳ�ʽ�⺯ʽ�в�ͬ�����ƣ���ҲҪ���岻ͬ����Ԫ���⽫�ڴ���ǰ����L���ִ�����ʱ�����鷳��

һ���취��ʹ��Microsoft Visual C++������TCHAR.H��ͷ�������ñ�ͷ��������ANSI C��׼��һ���֣�������ﶨ���ÿ����ʽ�;޼������ǰ�涼��һ�����ߡ�TCHAR.HΪ��Ҫ�ִ������ı�׼ִ��ʱ�ڳ�ʽ�⺯ʽ�ṩ��һϵ�е�������ƣ����磬_tprintf��_tcslen������ʱ��Щ����Ҳ��Ϊ��ͨ�á���ʽ���ƣ���Ϊ���Ǽȿ���ָ��ʽ��Unicode��Ҳ����ָ���Unicode�档

�����������Ϊ_UNICODE��ʶ���֣����ҳ�ʽ�а�����TCHAR.H��ͷ��������ô_tcslen�Ͷ���Ϊwcslen��

#define _tcslen wcslen

���û�ж���UNICODE����_tcslen����Ϊstrlen��

#define _tcslen strlen

�ȵȡ�TCHAR.H����һ���µ�������̬TCHAR�����������Ԫ������̬�����⡣��������� _UNICODEʶ���֣���ôTCHAR����wchar_t��

typedef wchar_t TCHAR ;

����TCHAR����char��

typedef char TCHAR ;

���ڿ�ʼ�����ִ������е�L���⡣���������_UNICODEʶ���֣���ôһ������__T�ľ޼��Ͷ������£�

#define __T(x) L##x

�����൱��ɬ���﷨�����Ϻ�ANSI C��׼��ǰ�ô������淶����һ�Ծ��ֺų�Ϊ��ճ�����ţ�token paste������������ĸL���ӵ��޼������ϡ���ˣ�����޼�������"Hello!"����L##x����L"Hello!"��

���û�ж���_UNICODEʶ���֣���__T�޼�ֻ�򵥵ض������£�

#define __T(x) x

���⣬���������޼���__T������ͬ��

#define _T��x�� __T��x��
#define _TEXT��x�� __T��x��

��Win32 console��ʽ��ʹ���ĸ��޼���ȡ�����ϲ����໹����ϸ�������أ����밴����������_T��_TEXT�޼��ڶ����ִ����֣�

_TEXT ("Hello!")

�������Ļ������������_UNICODE����ô�ô�������Ϊ����Ԫ����ϣ��������Ϊ8λԪ����Ԫ�ִ���

����Ԫ��WINDOWS
��

Windows NT�ӵײ�֧ԮUnicode������ζ��Windows NT�ڲ�ʹ����16λԪ��Ԫ��ɵ��ִ�����Ϊ��������������ط�����ʹ��16λԪ�ִ�������Windows NT���뾭�����ִ�����ҵϵͳ��ת����Windows NT��ִ��ΪASCII��Unicode����ASCII��Unicode��ϱ�д�ij�ʽ������Windows NT֧Ԯ��ͬ��API��ʽ���У���Щ��ʽ����8λԪ��16λԪ���ִ������ǽ����Ͽ���������ζ����ġ���

����Windows NT��Windows 98��Unicode��֧ԮҪ�ٵöࡣֻ�к��ٵ�Windows 98��ʽ����֧Ԯ���ִ�����Щ��ʽ���ڡ�Microsoft Knowledge Base article Q125671���У����ǰ���MessageBox�������Ҫ���еij�ʽ��ֻ��һ��.EXE����Ҫ����Windows NT��Windows 98�¶���ִ�У���ô�Ͳ�Ӧ��ʹ��Unicode������Ͳ�����Windows 98��ִ�У������ʽ���ܺ���Unicode���Windows��ʽ����������������Unicode��ij�ʽʱ�ᴦ춸�������λ�ã���Ӧ������д��ΪASCII��ΪUnicode�����ԭʼ�롣����DZ��������г�ʽ�ı�д��ʽ��

Windows��ͷ��������
��

�������ڵ�һ����������������һ��Windows��ʽ������ͷ����WINDOWS.H���õ�����������������ͷ����������WINDEF.H���õ�������������Windows��ʹ�õĻ�����̬���壬����������Ҳ����WINNT.H��WINNT.H����������Unicode֧Ԯ��

WINNT.H��ǰ�����C�ı�ͷ����CTYPE.H������C���ڶ��ͷ����֮һ������wchar_t�Ķ��塣WINNT.H�������µ�������̬������CHAR��WCHAR��

typedef char CHAR ;
typedef wchar_t WCHAR ;	// wc

������Ҫ����8λԪ��Ԫ����16λԪ��Ԫʱ���Ƽ�����Windows��ʽ��ʹ�õ�������̬��CHAR��WCHAR��WCHAR���������ע������������Ƿ��Ľ��飺һ�����WCHAR������̬�ı�������ǰ�渽������ĸwc��˵��һ������Ԫ��

WINNT.H��ͷ�������������˿�����8λԪ�ִ�ָ�������������̬���ĸ�������const 8λԪ�ִ�ָ���������̬�����ᆱѡ�˱�ͷ������һЩʵ�õ�˵��������̬��䣺

typedef CHAR * PCHAR, * LPCH, * PCH, * NPSTR, * LPSTR, * PSTR ;
typedef CONST CHAR * LPCCH, * PCCH, * LPCSTR, * PCSTR ;

����N��L��ʾ��near���͡�long����ָ����16λԪWindows�����ִ�С��ͬ��ָ�ꡣ��Win32��near��longָ��û������

���Ƶأ�WINNT.H���������ֿ���Ϊ16λԪ�ִ�ָ���������̬�����ֿ���Ϊconst 16λԪ�ִ�ָ���������̬��

typedef WCHAR * PWCHAR, * LPWCH, * PWCH, * NWPSTR, * LPWSTR, * PWSTR ;
typedef CONST WCHAR * LPCWCH, * PCWCH, * LPCWSTR, * PCWSTR ;

���ˣ���������������̬CHAR��һ��8λ��char����WCHAR��һ��16λ��wchar_t�����Լ�ָ��CHAR��WCHAR��ָ�ꡣ��TCHAR.Hһ����WINNT.H��TCHAR����Ϊһ�����Ԫ���͡����������ʶ����UNICODE��û�е��ߣ�����TCHAR��ָ��TCHAR��ָ��ͷֱ���ΪWCHAR��ָ��WCHAR��ָ�ꣻ���û�ж���ʶ����UNICODE����TCHAR��ָ��TCHAR��ָ��ͷֱ���Ϊchar��ָ��char��ָ�꣺

#ifdef  UNICODE                   
typedef WCHAR TCHAR, * PTCHAR ;
typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCWSTR LPCTSTR ;
#else 
typedef char TCHAR, * PTCHAR ;
typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCSTR LPCTSTR ;
#endif

����Ѿ���ij����ͷ��������������ͷ�����ж�����TCHAR������̬����ôWINNT.H��WCHAR.H��ͷ�������ܷ�ֹ���ظ����塣���������ۺ�ʱ�ڳ�ʽ��ʹ��������ͷ����ʱ����Ӧ������������ͷ����֮ǰ����WINDOWS.H��

WINNT.H��ͷ������������һ���޼����þ޼���L���ӵ��ִ��ĵ�һ������ǰ�����������UNICODEʶ���֣���һ������ __TEXT�ľ޼��������£�

#define __TEXT(quote) L##quote

���û�ж���ʶ����UNICODE��������������__TEXT�޼���

#define __TEXT(quote) quote

���⣬ TEXT�޼����������壺

#define TEXT(quote) __TEXT(quote)

����TCHAR.H�ж���_TEXT�޼��ķ���һ����ֻ�Dz��ز��ĵ��ߡ��ҽ��ڱ�����ʹ������޼���TEXT�汾��

��Щ�����ʹ����ͬһ��ʽ�л��ʹ��ASCII��Unicode�ִ������߱�дһ���ɱ�ASCII��Unicode����ij�ʽ�������ϣ����ȷ����8λԪ��Ԫ�������ִ�����ʹ��CHAR��PCHAR���������������Լ������ŵ��ִ���Ϊ��ȷ��ʹ��16λԪ��Ԫ�������ִ�����ʹ��WCHAR��PWCHAR������L���ӵ�����ǰ�档�����8λ����16λȡ���UNICODEʶ���ֵĶ���ı������ִ���Ҫʹ��TCHAR��PTCHAR��TEXT�޼���

Windows��ʽ����
��

��Windows 1.0��Windows 3.1��16λԪWindows�У�MessageBox��ʽλ춶�̬�����ʽ��USER.EXE����Windows 3.1���忪���׼���WINDOWS.H�У�MessageBox��ʽ�������£�

int WINAPI MessageBox (HWND, LPCSTR, LPCSTR, UINT) ;

ע�⣬��ʽ�ĵڶ�����������������ָ�����ִ���ָ�ꡣ����������һ��Win16��ʽʱ��Windows��������MessageBox���С���ʽ.EXE�����еı�������Windows���ó�ʽ�ĺ�����USER�е�MessageBox��ʽ��̬����������

32λ��Windows�������а汾��Windows NT���Լ�Windows 95��Windows 98�����˺�����16λ���ݵ�USER.EXE���⣬������һ����ΪUSER32.DLL�Ķ�̬�����ʽ�⣬�ö�̬�����ʽ�⺬��32λԪʹ���߽��溯ʽ�Ľ���㣬����32λԪ��MessageBox��

�����Windows֧ԮUnicode�Ĺؼ�����USER32.DLL�У�û��32λԪMessageBox��ʽ�Ľ���㡣ʵ���ϣ�����������㣬һ����ΪMessageBoxA��ASCII�棩����һ����ΪMessageBoxW������Ԫ�棩�����ִ���������ÿ��Win32��ʽ������ҵϵͳ������������㣡���˵��ǣ���ͨ�����ع���������⣬��ʽ��ֻ��ʹ��MessageBox����TCHAR��ͷ����һ����ÿ��Windows��ͷ��������������Ҫ�ļ��ɡ�

������MessageBoxA��WINUSER.H�ж���ķ���������MessageBox���ڵĶ�������ƣ�

WINUSERAPI int WINAPI MessageBoxA (	HWND hWnd, LPCSTR lpText,
				LPCSTR lpCaption, UINT uType) ;

������MessageBoxW��

WINUSERAPI int WINAPI MessageBoxW (HWND hWnd, LPCWSTR lpText,
				LPCWSTR lpCaption, UINT uType) ;

ע�⣬MessageBoxW��ʽ�ĵڶ����͵�����������ָ�����Ԫ��ָ�ꡣ

�����Ҫͬʱʹ�ò��ֱ�ƥ��ASCII�Ϳ���Ԫ��ʽ���У���ô������Windows��ʽ����ȷ��ʹ��MessageBoxA��MessageBoxW��ʽ�����������ʽд���߽�����ʹ��MessageBox�������Ƿ�����UNICODE��MessageBox����MessageBoxA��MessageBoxWһ������WINUSER.H�������һ����ʱ����ʽ�൱���飺

#ifdef UNICODE
#define MessageBox  MessageBoxW
#else
#define MessageBox  MessageBoxA
#endif

���������������UNICODEʶ���֣���ô��ʽ�����е�MessageBox��ʽ����ʵ���Ͼ���MessageBoxW��ʽ�����򣬾���MessageBoxA��ʽ��

ִ�иó�ʽʱ��Windows����ʽ�в�ͬ�ĺ�ʽ�����벻ͬ��Windows��̬�����ʽ��Ľ�������ᡣ��Ȼֻ���������⣬���ǣ���Windows 98�в���ִ��Unicode���Windows��ʽ����Ȼ��Щ��ʽ�н���㣬��ͨ�����ش�����롣Ӧ�ó�ʽע����Щ���صĴ��󲢲�ȡһЩ�����Ķ�����

Windows���ִ���ʽ
��

����ǰ��̸���ģ�Microsoft C��������Ԫ����Ҫ�ִ�������C����ִ��ʱ�ڳ�ʽ�⺯ʽ��������ͨ�汾��������Windows����������һ���֡����磬������Windows�����һ���ִ���ʽ����Щ��ʽ���������ִ����ȡ������ִ��������ִ��ͱȽ��ִ���

ILength = lstrlen (pString) ;
pString = lstrcpy (pString1, pString2) ;
pString = lstrcpyn (pString1, pString2, iCount) ;
pString = lstrcat (pString1, pString2) ;
iComp = lstrcmp (pString1, pString2) ;
iComp = lstrcmpi (pString1, pString2) ;

��Щ��ʽ��C��ʽ���ж�Ӧ�ĺ�ʽ������ͬ�����������UNICODEʶ���֣���ô��Щ��ʽ�����ܿ��ִ�������ֻ���ܳ����ִ������ִ����lstrlenW��ʽ����Windows 98��ִ�С�

��Windows��ʹ��printf
��

������ģʽ��������C���Գ�ʽд����ʷ�ij�ʽд���������ر�ϲ��printf��ʽ����ʹ����ʹ�ø��򵥵��������puts������printf������Kernighan��Ritchie�ġ�hello, world����ʽ��һ��Ҳ�������˾��档����֪������ǿ��ġ�hello, world�����ջ�����Ҫprintf�ĸ�ʽ����������������ô�ͷ��ʼ��ʹ������

���и�����Ϣ����Windows��ʽ�в���ʹ��printf����ȻWindows��ʽ�п���ʹ�ô����C��ִ��ʱ�ڳ�ʽ�⣭ʵ���ϣ������ʽд���߸�Ը��ʹ��C����������͵���I/O��ʽ������Windows�е�Ч�ĺ�ʽ��Windows�Ա�׼����ͱ�׼���û�и����Windows��ʽ�п�ʹ��fprintf��������printf��

����һ������Ϣ���Ǿ�����Ȼ����ʹ��sprintf��sprintfϵ���е�������ʽ����ʾ���֡���Щ��ʽ���˽����ݸ�ʽ���������ʽ��һ���������ṩ���ִ����������⣬�书����printfI��ͬ��Ȼ���ɶԸ��ִ����в��������罫�䴫��MessageBox����

�������δʹ�ù�sprintf ���ҵ�һ�ο�ʼдWindows��ʽʱҲû�ù��˺�ʽ����������һ����̵�ִ��ʵ�壬printf��ʽ˵�����£�

int printf (const char * szFormat, ...) ;

��һ��������һ����ʽ�ִ������������ʽ�ִ��еĴ������Ӧ�IJ�ͬ���Ͷ��������

sprintf��ʽ�������£�

int sprintf (char * szBuffer, const char * szFormat, ...) ;

��һ����������Ԫ��������������һ����ʽ�ִ���Sprintf���ǽ���ʽ�������׼��������ǽ������szBuffer���ú�ʽ���ظ��ִ��ij��ȡ�������ģʽ��ʽ����У�

printf ("The sum of %i and %i is %i", 5, 3, 5+3) ;

�Ĺ�����ͬ�

char szBuffer [100] ;
sprintf (szBuffer, "The sum of %i and %i is %i", 5, 3, 5+3) ;
puts (szBuffer) ;

��Windows�У�ʹ��MessageBox��ʾ������puts��

����ÿ���˶�������������ʽ�ִ��뱻��ʽ���ı�������ʱ������ʹprintfִ�д��󲢿�����ɳ�ʽ������ʹ��sprintfʱ��������Ҫ������Щ�����һ���һ���µĸ�������������ִ������������㹻���Դ�Ž����Microsoftר�ú�ʽ_snprintf�������һ���⣬�˺�ʽ��������һ����������ʾ����Ԫ����Ļ�������С��

vsprintf��sprintf��һ�����Σ���ֻ������������vsprintf���ִ���ж���������Զ���ʽ������printf��ʽ��vsprintf��ǰ����������sprintf��ͬ��һ����춱���������Ԫ��������һ����ʽ�ִ���������������ָ���ʽ���������е�ָ�ꡣʵ���ϣ���ָ��ָ���ڶѵ��й���ʽ���еı�����va_list��va_start��va_end�޼�����STDARG.H�ж��壩�������Ǵ����ѵ�ָ�ꡣ���������SCRNSIZE��ʽչʾ��ʹ����Щ�޼��ķ�����ʹ��vsprintf��ʽ��sprintf��ʽ����������д��

int sprintf (char * szBuffer, const char * szFormat, ...)
{
	int     iReturn ;
	va_list pArgs ;
	va_start (pArgs, szFormat) ;
	iReturn = vsprintf (szBuffer, szFormat, pArgs) ;
	va_end (pArgs) ;
	return iReturn ;
}

va_start�޼���pArg����Ϊָ��һ���ѵ��������ñ���λַ�ڶѵ�����szFormat�����档

�������Windows���ڳ�ʽʹ����sprintf��vsprintf�����յ���Microsoft��Windows API���������������Ƶĺ�ʽ��Windows��wsprintf��wvsprintf��ʽ�ڹ�������sprintf��vsprintf��ͬ�������Dz��ܴ��������ʽ��

��Ȼ����������Ԫ�ķ�����sprintf���͵ĺ�ʽ�������࣬ʹ�ú�ʽ���Ʊ�ü�Ϊ���ҡ���2-1�г���Microsoft��Cִ��ʱ�ڳ�ʽ���Windows֧Ԯ������sprintf��ʽ��

��2-1
  ASCII ����Ԫ ����
 ï¿½ï¿½ï¿½ï¿½ï¿½Ä±ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½       
��׼�� sprintf swprintf _stprintf
��󳤶Ȱ� _snprintf _snwprintf _sntprintf
Windows�� wsprintfA wsprintfW wsprintf
 ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ðµï¿½Ö¸ï¿½ï¿½       
��׼�� vsprintf vswprintf _vstprintf
��󳤶Ȱ� _vsnprintf _vsnwprintf _vsntprintf
Windows�� wvsprintfA wvsprintfW wvsprintf

�ڿ���Ԫ���sprintf��ʽ�У����ִ�����������Ϊ���ִ����ڿ���Ԫ���������Щ��ʽ�У���ʽ�ִ������ǿ��ִ���������������ȷ�����ݸ���Щ��ʽ�������ִ�Ҳ�����ɿ���Ԫ��ɡ�

��ʽ��ѶϢ����
��

��ʽ2-1��ʾ��SCRNSIZE��ʽչʾ�����ʵ��MessageBoxPrintf��ʽ���ú�ʽ���������������printf�����������ǵĸ�ʽ��

 ï¿½ï¿½Ê½2-1  SCRNSIZE
SCRNSIZE.C
/*---------------------------------------------------------------------------
	SCRNSIZE.C --	Displays screen size in a message box
  			(c) Charles Petzold, 1998
----------------------------------------------------------------------------*/
#include <windows.h>
#include <tchar.h>     
#include <stdio.h>     

int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, ...)
{
	TCHAR   szBuffer [1024] ;
	va_list pArgList ;

	// The va_start macro (defined in STDARG.H) is usually equivalent to:
	// pArgList = (char *) &szFormat + sizeof (szFormat) ;

	va_start (pArgList, szFormat) ;

	// The last argument to wvsprintf points to the arguments

	_vsntprintf (	szBuffer, sizeof (szBuffer) / sizeof (TCHAR), 
			szFormat, pArgList) ;

	// The va_end macro just zeroes out pArgList for no good reason
	va_end (pArgList) ;
	return MessageBox (NULL, szBuffer, szCaption, 0) ;
}
int WINAPI WinMain (	HINSTANCE hInstance, HINSTANCE hPrevInstance,
			PSTR szCmdLine, int iCmdShow) 
{
	int cxScreen, cyScreen ;
	cxScreen = GetSystemMetrics (SM_CXSCREEN) ;
	cyScreen = GetSystemMetrics (SM_CYSCREEN) ;

	MessageBoxPrintf (	TEXT ("ScrnSize"), 
			TEXT ("The screen is %i pixels wide by %i pixels high."),
			cxScreen, cyScreen) ;
	return 0 ;
}

���ɴ�GetSystemMetrics��ʽ�õ�����Ѷ���ó�ʽ��ͼ��Ϊ��λ��ʾ����Ѷ��ʾ�Ŀ��Ⱥ͸߶ȡ�GetSystemMetrics��һ�����������Windows�в�ͬ����ijߴ���Ѷ�ĺ�ʽ����ʵ�ϣ��ҽ��ڵ�������GetSystemMetrics��ʽ����չʾ�����һ��Windows�Ӵ�����ʾ�͹����������֡�

��������ʻ�
��

Ϊ�����г�׼����Windows��ʽ����Ҫʹ��Unicode�����ʻ������˱���ķ�Χ������Nadine Kano��д�ġ�Developing International Software for Windows 95 and Windows NT����Microsoft Press��1995�꣩һ�������������ࡣ

�����еij�ʽд��ʱ�����Ƴɼȿ�ʹ��Ҳ�ɲ�ʹ�ö����UNICODEʶ���������롣�������������Ԫ���ִ�����ʹ��TCHAR�����ִ�����ʹ��TEXT�޼����Լ�ע�ⲻҪ����λԪ�����Ԫ�����磬ע��SCRNSIZE�е� _vsntprintf���С��ڶ��������ǻ���������Ԫ��С��ͨ������ʹ��sizeof ��szBuffer������������������п���Ԫ���򷵻صIJ��ǻ���������Ԫ���ȣ����ǻ�������λԪ���С����������sizeof��TCHAR������ֿ���

ͨ������Visual C++ Developer Studio�У���ʹ�����ֲ�ͬ���趨�������ʽ��Debug��Release��Ϊ���������Ա���ķ�����ʽ�������޸���Debug�趨���Ա�춶���UNICODEʶ���֡������ʽʹ������Ҫ�ִ���������C��ʽ�⺯ʽ����ô_UNICODEʶ����Ҳ��Debug�趨�ж��壨Ҫ�˽�������������ɵģ���ӡ�Project�����ܱ���ѡ��Settings����Ȼ�ᵥ����C/C++����ǩ����ʹ�����ַ�ʽ����Щ��ʽ�Ϳ��Է���ر����±���������Թ����ԡ�

���������г�ʽ�������Ƿ�ΪUnicode���룭��������Windows NT��ִ�С�ֻ�м�����������⡣�����а�Unicode����ij�ʽ������Windows 98��ִ�У�����Unicode������ԡ����º͵�һ�µij�ʽ��������������MessageBoxW��Windows 98֧Ԯ����������ԪWindows��ʽ֮һ����SCRNSIZE.C�У������Windows��ʽwprintf������_vsntprintf����������ɾ���ú�ʽ�ĵڶ�������������ôSCRNSIZE.C��Unicode�潫������Windows 98��ִ�У�������ΪWindows 98��֧ԮwprintfW��

�ڱ�������棨�ر��ڵ����£����ܼ��̵�ʹ��ʱ�������ǽ���������д�ܴ���Զ����Windows˫��Ԫ����Windows��ʽ����һ�����׵����顣����û��˵�����ȥ�������һ�����ԭ�򣬱����е�ijЩ��Unicode�汾�ij�ʽ��Զ�����Windows�²�������ִ�С���Ҳ��Unicode�Խ����ij�ʽ��������Ҫ��һ�����ɡ�Unicode������ʽ�����׵ؿ�Խ���硣