迷你5207专属论坛

注册

 

发新话题 回复该主题

[魅族M8] M8SDK学习之了解一下字符串 [复制链接]

发表者
不知道其他朋友在写C++程序时会不会感觉到一点郁闷,就是字符串的处理。像在Delphi、C#中对字符串处理都是非常的简单,有大量的函数支持,而且string都是以关键字形式存在,编绎器进行了优化处理。所以使用起来时无需考虑太多。而一到c/c++字符串基本上占了我大部分的调试时间,外加上指钟等概念的模糊理解,更是血上加霜。所以将这段时间对字符串的处理总结一下,虽然还有很多困惑,还有许多问题。

1、整一下字符串的概念
  在c++中一个字符用char表示,char占一个字节。所有的英文字母、数字和标点符号都是单字节的,当然除了全角的标点,也就是ansi字符。反正是个什么国际标准,我知道在Delphi2009之前的版本中都是使用的AnsiString。

字符串就是将一串字符连起来就是字符串,实际就是一个字符的数组。比如可以这样申明一个字符串变量:
char *str = "mini188";
int n = strlen(str);
字符串的首字节即str[0]的指针就是字符串的首地址,用指针指向这个地址就能获得整个串了,这里还要知道一点就是每一个字符串的结尾都会带一个'\0',这就是串的结束了。

写到这里时有点心虚啦,确实看概念和理解概念是两个阶段,其实我还是没有完全的理解字符串,所以写的时候感觉力不从心,所以暂时就写关于字符串的概念就不再多说,接下来主要说些应用相关的东西。

2、Wince中的字符处理
回到M8SDK开发,不知道朋友们发现没,在Wince中所有的字符编码都是uniocde的,而前面我们介绍了char字符串,是Ansi编码的,我在写学习INI哪篇 文章时就提到过一个问题:在Windowsxp写手写的ini文件不能在wince中正常读写,其实这就是字符编码整的结果,在windowsxp中建立的一份文本文件默认使用的是ansi编码,到wince中当然失败啦,你可能想知道为什么吧?其实,哎,又要整概念啦,关键就在unicode编码和Ansi编码的区别上。

Ansi将字符串按一个字节为单位,所以读写ansi其实就可以一个char一个char的识别。
unicode的最小单位是两个字节,中文字符都是占两个字符的,所以读的时候要2个char一起读才是正确的。

明白啦吧,理解了这个,再来看一个比较郁闷的问题。

今天在写一个功能读取文本文件内容。这个功能看起来很简单,如果在Delphi或者C#中都是很容易处理的,但是在WinCE环境中遇到问题了!~~~ 就是因为uniocde!!!!!!

我在网上找了一堆的关于读取文本文件的代码,例子,说明都是ansistring的,我举个最简单的例子,你如何把从文本文件里读出来的字符串用MzMessageBoxEx显示出来?就为这,我弄了十几个小时。当然这可能是我本人能力问题。MzMessageBoxEx默认的是wchar_t,死了吧?你char他压根不理你。

我跑到窗户边上吐了一口血,然后回到电脑边上继续找结果,网上有朋友给出了办法就是将char解析为wchar_t,这样就可以实现了。说到这,又得整一下char和wchar_t的区别了是吧?

char前面说了是一个字节,也就是8位
wchar_t 是两个字节,是16位,常称宽字符

经过在哪该死的慢的要死的模拟器上显示出文本内容,我不断的在调试,下面就是实现转换的代码:
  1. void chr2wch(const char *buffer, wchar_t *wBuf)
  2. {
  3.     size_t len = strlen(buffer);
  4.     size_t wlen = MultiByteToWideChar(CP_ACP, 0, (const char*)buffer, int(len), NULL, 0);
  5.     wBuf = new wchar_t[wlen + 1];
  6.     MultiByteToWideChar(CP_ACP, 0, (const char*)buffer, int(len), wBuf, int(wlen));
  7. }
复制代码
使用这个函数,将char字符串传进来,第二个参数传出来的就是想要的结果了。这样就完成了整个的过程。


最后,希望没有C++基础或者开发基础比较弱的朋友,和我一样还是多看看基础的东西吧,这些其实在大学的时候都应该掌握的。



作者:5207
出处:http://www.mini188.com
本文版权归作者所有,欢迎转载请注明出处,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
本主题由 皇帝 5207 于 2009-7-4 11:50:18 执行 主题分类 操作
分享 转发
相信与不相信都是矛盾的.  5207宣!欢迎您来到点滴论坛
TOP
发新话题 回复该主题