codeproject:CString Management通过阅读本文你可以学习如何有效地使用 CString。"> CString 操作指南原著:Joseph M. Newcomer翻译:littleloach原文出处:asp" target="_blank">codeproject:CString Management通过阅读本文你可以学习如何有效地使用 CString。_IT技术专题(vc中的CString的操作 )
    当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: CString 操作指南原著:Joseph M. Newcomer翻译:littleloach原文出处:asp" target="_blank">codeproject:CString Management通过阅读本文你可以学习如何有效地使用 CString。
 

 

    摘要:vc中利用ado共同实现数据库的操作    ado是应用层的编程接口,它通过ole db提供的com接口访问数据,它适合于各种客户机/服务器应用系统和基于web的应用,尤其在一些脚本语言中访问数据库操作是ado的主要优势。ado 是一套用自动化技术建立起来的对象层次结构,它比其他的一些对象模型如dao(data access object)、rdo(remote data obje......
 ·vc下利用ado连接access数据库     »显示摘要«
    摘要:#include <iostream.h>#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("eof", "adoeof") int main(){ //使用ado连接数据库... //------------......


vc中的CString的操作
上一页   ...)  使用_t宏并不是意味着你已经创建了一个unicode的程序,你只是创建了一个有unicode意识的程序而已.如果你在默认的8-bit模式下编译你的程序的话,得到的将是一个普通的8-bit的应用程序(这里的8-bit指的只是8位的字符编码,并不是指8位的计算机系统);当你在unicode环境下编译你的程序时,你才会得到一个unicode的程序.记住,cstring 在 unicode 环境下,里面包含的可都是16位的字符哦. 3.cstring 型转化成 int 型  把 cstring 类型的数据转化成整数类型最简单的方法就是使用标准的字符串到整数转换例程.  虽然通常你怀疑使用_atoi()函数是一个好的选择,它也很少会是一个正确的选择.如果你准备使用 unicode 字符,你应该用_ttoi(),它在 ansi 编码系统中被编译成_atoi(),而在 unicode 编码系统中编译成_wtoi().你也可以考虑使用_tcstoul()或者_tcstol(),它们都能把字符串转化成任意进制的长整数(如二进制.八进制.十进制或十六进制),不同点在于前者转化后的数据是无符号的(unsigned),而后者相反.看下面的例子:

cstring graycat = "gray" + "cat";

或者这样: 【程序编程相关:CBitmapButton的使用

cstring hex = _t("fab"); cstring decimal = _t("4011"); assert(_tcstoul(hex, 0, 16) == _ttoi(decimal));

4.cstring 型与 char* 类型的相互转化  这是初学者使用 cstring 时最常见的问题.有了 c++ 的帮助,很多问题你不需要深入的去考虑它,直接拿来用就行了,但是如果你不能深入了解它的运行机制,又会有很多问题让你迷惑,特别是有些看起来没有问题的代码,却偏偏不能正常工作.比如,你会奇怪为什么不能写向下面这样的代码呢: 【推荐阅读:vc下使用windows的性能计数器简介

cstring graycat = cstring("gray") + cstring("cat");

或者这样: 【扩展信息:visual c++键盘快捷键大全

cstring graycat("gray" + "cat");

  事实上,编译器将抱怨上面的这些尝试.为什么呢?因为针对cstring 与 lpctstr数据类型的各种各样的组合,“ +” 运算符 被定义成一个重载操作符.而不是两个 lpctstr 数据类型,它是底层数据类型.你不能对基本数据(如 int.char 或者 char*)类型重载 c++ 的运算符.你可以象下面这样做:

cstring graycat = cstring("gray") + "cat";

研究一番就会发现:“ +”总是使用在至少有一个 cstring 对象与一个 lpcstr 的场合.注意,编写有 unicode 意识的代码总是一件好事,比如:

cstring graycat = cstring(_t("gray")) + _t("cat");

这将使得你的代码可以直接移植.char* 转化为 cstring  现在你有一个 char* 类型的数据,或者说一个字符串.怎么样创建 cstring 对象呢?这里有一些例子:

char * p = "this is a test";

或者象下面这样更具有 unicode 意识:

tchar * p = _t("this is a test")

lptstr p = _t("this is a test");

你可以使用下面任意一种写法:

cstring s = "this is a test"; // 8-bit only cstring s = _t("this is a test"); // unicode-aware cstring s("this is a test"); // 8-bit only cstring s(_t("this is a test")); // unicode-aware cstring s = p; cstring s(p);

  用这些方法可以轻松将常量字符串或指针转换成 cstring.需要注意的是,字符的赋值总是被拷贝到 cstring 对象中去的,所以你可以象下面这样操作:

tchar * p = _t("gray"); cstring s(p); p = _t("cat"); s += p;

结果字符串肯定是“graycat”.cstring 类还有几个其它的构造函数,但是这里我们不考虑它,如果你有兴趣可以自己查看相关文档.事实上,cstring 类的构造函数比我展示的要复杂,比如:

cstring s = "this is a test";

  这是很草率的编码,但是实际上它在 unicode 环境下能编译通过.它在运行时调用构造函数的 multibytetowidechar 操作将 8 位字符串转换成 16 位字符串.不管怎样,如果 char * 指针是网络上传输的 8 位数据,这种转换是很有用的.cstring 转化成 char* 之一:强制类型转换为 lpctstr;  这是一种略微硬性的转换,有关“正确”的做法,人们在认识上还存在许多混乱,正确的使用方法有很多,但错误的使用方法可能与正确的使用方法一样多.  我们首先要了解 cstring 是一种很特殊的 c++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针.一个是该缓冲中有效的字符记数以及一个缓冲区长度. 有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个null字符).字符记数与缓冲区长度被巧妙隐藏.  除非你做一些特殊的操作,否则你不可能知道给cstring对象分配的缓冲区的长度.这样,即使你获得了该0缓冲的地址,你也无法更改其中的内容,不能截短字符串,也 绝对没有办法加长它的内容,否则第一时间就会看到溢出.  lpctstr 操作符(或者更明确地说就是 tchar * 操作符)在 cstring 类中被重载了,该操作符的定义是返回缓冲区的地址,因此,如果你需要一个指向 cstring 的 字符串指针的话,可以这样做:

cstring s("graycat"); lpctstr p = s;

  它可以正确地运行.这是由c语言的强制类型转化规则实现的.当需要强制类型转化时,c++规测容许这种选择.
...   下一页

    摘要: 终于使用microsoft enhanced cryptographic provider v1.0 实现了公钥加密和解密,但safesign csp version 1.0不能,不知为什么,有高手能解答吗?另外dwbuflen 怎样计算才好,我取100,出编号234错,便取了200。以下程序在vs2003下调试成功#include "stdafx.h"#include &l......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE