说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

关于wchar_t类型!!

编辑:说三道四文库 发布时间:2018-04-21 11:43
HTML文档下载 WORD文档下载 PDF文档下载
wchar_t用在哪里??具体的使用方法!!!!


拜托各位老大
关注

和尚一提问题

肯定就是高难度的了
我还不知道有这个类型啊,,
我一定要留意。。。
宽字符类型
为了与unicode兼容
叶老大!!帮帮小弟!!!
SSTS(铁冰) 大虾!!帮帮
一个字符串加上前缀修饰符“L”后就成了宽字符串
此外还有多字符常量等!

比如:'\006\007\008\009'
需要注意的是,还有这样的类型:• Wi d e S t r i n g 由Wi d e C h a r 字符组成,而不是由A n s i C h a r 字符组成的,它们跟U n i c o d e 字符串兼容。
• Wi d e S t r i n g 用S y s A l l o c S t r L e n ( ) A P I 函数进行分配,它们跟O L E 的B S T R 字符串相兼容。
• Wi d e S t r i n g 没有引用计数,所以将一个Wi d e S t r i n g 字符串赋值给另一个Wi d e S t r i n g 字符串时,就
需要从内存中的一个位置复制到另一个位置。这使得Wi d e S t r i n g 在速度和内存的利用上不如
A n s i S t r i n g 有效。
就像上面所提到的,编译器自动在A n s i S t r i n g 类型和Wi d e S t r i n g 类型的变量间进行转换。示例如
下:
v a r
W: w i d e S t r i n g ;
S : s t r i n g ;
b e g i n
W: = ' M a r g a r i t a v i l l e ' ;
S : = W; // wideString 转换成A n s i S t r i n g
S:='Come Monday';
W:=S; // AnsiString 转换成Wi d e S t r i n g
e n d ;
为了能灵活地运用Wi d e S t r i n g 类型,Object Pascal 重载了C o n c a t ( )、C o p y 、I n s e r t ( )、L e n g t h ( )、
P o s ( )和S e t L e n g t h ( )等例程以及+、=和< >等运算符。下面的代码在语法上是正确的:
v a r
W 1 , W 2 : Wi d e s t r i n g ;
P : I n t e g e r ;
b e g i n
W 1 : = ' E n f i e l d ' ;
W 2 : = ' f i e l d ' ;
If W1<>W2 then
P : = P o s ( W 1 , W 2 ) ;
e n d ;
就像A n s i S t r i n g 和S h o r t S t r i n g 类型一样,能用数组的下标来访问Wi d e S t r i n g 中一个特定的字符:
v a r
W: Wi d e S t r i n g ;
C : Wi d e C h a r ;
b e g i n
W:='Ebony and Ivory living in prefect harmony';
C:=W[Length(W)]; //C 包含W 字符串的最后一个字符
e n d ;
4. 以n u l l 结束的字符串
正如前面所提到的,D e l p h i 有三种不同的以n u l l 结束的字符串类型:P C h a r 、PA n s i C h a r 和
P Wi d e C h a r 。它们都是由D e l p h i 的三种不同字符组成的。这三种类型在总体上跟P C h a r 是一致的。
P C h a r 之所以保留是为了跟Delphi 1.0 和Win32 API 兼容,而它们需要使用以n u l l 结束的字符串,P C h a r
被定义成一个指向以n u l l (零)结束的字符串指针
在BCB里也有widestring的哦!这下子知道和bstr的转换了吧:)
记得给分哦!嘿嘿~~~
它经常用在COM中,因为COM对象的函数的字符串参数基本上都是UNICODE的。
谢谢rh@@@@@@@@@@@@@@@@@@

以后你和gugu成了事!!!!我大礼送上1!!!!!!!!!!!
我加分!!!!!大家快来!!!!净可能说多一点!!!!!!!!!!1

















我K!!!
who is gugu? 和 rh 大哥什么关系?
rh你的字体好奇怪!
先踢球去,回来再上这来。
我也要走了
我还要写程序呢~~~
其实你要的,写下widestring,按f1,全有。没有的,我基本都c+c和c+v来给你了
如何加前缀!!!
RH好样的。
??如何加前缀!!! 
up
我K!给分!
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        char L = 'A';//定义一个L先
        //注意,为了测试我说的话,你可以把这个变量定义去掉,可以看见再加L依然正确
        //而加别的就不可以!

        WideString s = L"how";//这里的L为前缀修饰符号,表示是宽字符串
        //可以试下面的语句
        ///////WideString s1 = A"aaaaaa";//这一句就不可以,前面加的是A,不知道是什么玩意

        AnsiString a = s;//直接转换
        ShowMessage(a);//显示出how

        a = a + L;//这里的L是变量,其值为字符A,是我们先前所定义的那个
        ShowMessage(a);//显示出how L
}
错了一点,最后显示的是howA,不是howL
RH你好牛啊!引自阿良。
强烈要求把此贴送入精华区。
RH我还想给你点分做为奖赏,可惜我没有可用分了,等我到灌水乐园再赚一些再给你。
哈哈,虚竹我在帮你拉客呢。
RH!!!!!!!!!!!!!!!!!




太好了!!!!!!!!!!!!!!



我送你100分!!!!!!





不过再等一下!!!结束时给你







class  AtoWConverter {
  LPWSTR _wstr;
public:
  AtoWConverter (LPCTSTR s);
  ~AtoWConverter ();
  operator LPCWSTR ();
};
class  WtoAConverter {
  LPTSTR _astr;
public:
  WtoAConverter (LPCWSTR w);
  ~WtoAConverter ();
  operator LPCTSTR ();
};

AtoWConverter::AtoWConverter (LPCTSTR s) {
#ifdef UNICODE
  // In this case both strings are Unicode and we just use normal lstrcpy.
  WCHAR* _wstr = new WCHAR[lstrlen(s)];
  lstrcpy (_wstr, s);
#else
  // We need to convert our ASCII string to Unicode and copy after that.
  //                             CP_ACP
  int len = MultiByteToWideChar (CP_OEMCP, 0, s, -1, NULL, 0);
  _wstr = new WCHAR[len];

  //                   CP_ACP
  MultiByteToWideChar (CP_OEMCP, 0, s, -1, _wstr, len);
#endif
}

AtoWConverter::~AtoWConverter () {
  delete [] _wstr;
}

AtoWConverter::operator LPCWSTR () {
  return _wstr;
}

WtoAConverter::WtoAConverter (LPCWSTR w) {
#ifdef UNICODE
  // In this case both strings are Unicode and we just use normal lstrcpy.
  TCHAR* _astr = new TCHAR[lstrlen(s)];
  return lstrcpy (_astr, s);
#else
  // We need to convert the Unicode to ASCII string and copy after that.
  //                             CP_ACP
  int len = WideCharToMultiByte (CP_OEMCP, 0, w, -1, NULL, 0, NULL, NULL);
  _astr = new char[len];

  //                   CP_ACP
  WideCharToMultiByte (CP_OEMCP, 0, w, -1, _astr, len, NULL, NULL);
#endif
}

WtoAConverter::~WtoAConverter () {
  delete [] _astr;
}

WtoAConverter::operator LPCTSTR () {
  return _astr;
}

以上试用UNICO互相转化Ansi的一个类的使用。
你可能有用。
wchar_t就是宽字符,占两个字节
up
我天山六阳掌!!!!!
天山六阳掌????????哈哈哈哈哈哈~~~还说你不是和尚!!!!!
到 11点我就给分
时间到!!!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘