Chinaunix首页 | 论坛 | 博客
  • 博客访问: 110290
  • 博文数量: 24
  • 博客积分: 1475
  • 博客等级: 上尉
  • 技术积分: 291
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-04 14:14
个人简介

交互设计在未来很有前途,不要再说是做界面的了。

文章分类

全部博文(24)

文章存档

2013年(2)

2012年(2)

2010年(4)

2009年(2)

2007年(11)

2006年(3)

我的朋友

分类: C/C++

2006-04-17 08:15:23

网络上关于unicode或宽字节编程的介绍很多,为什么要这样的的原因介绍的也很多,下面我们就从实用的角度出发,来看一下如果不采用unicode或者宽字节编程会给我们带来的一个问题.

我们通过一段代码来演示不采用unicode和采用了之后所产生的不同结果.

先看没有采用unicode:

#include

#include

#include

void main()

{

   char hz[32];

   char str[2][32] = {"钦佩","恼怒"};

   strcpy(hz,"");

for(int k=0;k

   {

        printf("%02x",hz[k]);

   }

   printf("\n");

   for(int i=0;i<2;i++)

   {

        if (strstr(str[i],hz) != NULL)

        {

            printf("str ======%s\n",str[i]);

            for(int j=0;j

                printf("%02x",str[i][j]);

            printf("\n");

        }

   }

}

输出结果为:

       ffffffd5ffffffc5

       str ======钦佩

       ffffffc7ffffffd5ffffffc5ffffffe5

       str ======恼怒

       ffffffc4ffffffd5ffffffc5ffffffad

不难看出,由于单字节的字符串处理函数是按一个字节一个字节处理的,钦佩恼怒两个字符串中都含有ffffffd5ffffffc5(""),所以输出结果为这两个字符串中都含有""这个字符串.

再来看看采用了宽字节的:

#include

#include

#include

#include

 

 

void main()

{

    wchar_t hz[32];

    wchar_t str[2][32] = {L"钦佩",L"恼怒"};

    wcscpy(hz,L"");

 

    for(int k=0;k

    {

        wprintf(L"%02x",hz[k]);

    }

    wprintf(L"\n");

    for(int i=0;i<2;i++)

    {

        if (wcsstr(str[i],hz) != NULL)

        {

            for(int j=0;j

                wprintf(L"%02x",str[i][j]);

            wprintf(L"\n");

        }

    }

}

输出结果:

    5f20

这样,对字符串的处理就不再出现误判的情形.

在实际编程中,需要处理汉字的部分多集中在界面处理部分,当然在后台程序中也可能会涉及.

阅读(1236) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~