VC字符串转换常用函数

最近在做一些关于VC的ActiveX小插件,经常会遇到字符串处理的问题,狂查CSDN和MSDN,结果并不理想。先说明一下,相关处理函数在VC++6.00测试通过。也许很多人不能理解,现在都什么年代了,还用VC6.0,其实VC开发插件有一个好处就是部署的时候方便一些,不用考虑浏览器端用户是否安装了.net Framework。那个.net Framework随着推出新版本越来越大,要让用户花那么多时间去安装那个庞然大物,而实际用到的东西却很少很少,这样很多人会不干的。另外,服务端的是java开发的,要加上.net更加不可能。因此,VC开发的东西就不用担心这些东西。说多了。。。。。

在VC编程中经常会遇到字符串转化的问题,现在做一下总结,以方便以后使用。

(1) char*转换成CString
  若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:
char chArray[] = "Char test";
TCHAR * p = _T("Char test");( 或LPTSTR p = _T("Char test");)
CString theString = chArray;
theString.Format(_T("%s"), chArray);
theString = p;

(2) CString转换成char*

若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:

方法一,使用强制转换。例如:

CString theString( (_T("Char test "));
LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;

方法二,使用strcpy。例如:

CString theString( (_T("Char test "));
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);

  需要说明的是,strcpy(或可移值的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char*
(ANSI),系统编译器将会自动对其进行转换。

 方法三,使用CString::GetBuffer
如果你需要修改 CString 中的内容,它有一个特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一个可写的缓冲指针。
如果你只是打算修改字符或者截短字符串,例如:
CString s(_T("Char test "));
LPTSTR p = s.GetBuffer();
LPTSTR dot = strchr(p, ‘‘.‘‘);
// 在这里添加使用p的代码
if(p != NULL)
*p = _T(‘\0‘);
s.ReleaseBuffer(); // 使用完后及时释放,以便能使用其它的CString成员函数
在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。因为
ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。

其他常规转换

先定义一些常见类型变量借以说明
int i = 100;
long l = 2001;
float f=300.2;
double d=12345.119;
char username[]="xx";
char temp[200];
char *buf;
CString str;

一、其它数据类型转换为字符串
短整型(int)
itoa(i,temp,10); /将i转换为字符串放入temp中,最后一个数字表示十进制
itoa(i,temp,2); //按二进制方式转换
长整型(long)
ltoa(l,temp,10);

二、从其它包含字符串的变量中获取指向该字符串的指针
CString变量
str = "2008北京奥运";
buf = (LPSTR)(LPCTSTR)str;
BSTR类型的_variant_t变量
v1 = (_bstr_t)"程序员";
buf = _com_util::ConvertBSTRToString((_bstr_t)v1);

三、字符串转换为其它数据类型
strcpy(temp,"123");
短整型(int)
i = atoi(temp);
长整型(long)
l = atol(temp);
浮点(double)
d = atof(temp);

四、其它数据类型转换到CString
使用CString的成员函数Format来转换,例如:
整数(int)
str.Format("%d",i);
浮点数(float)
str.Format("%f",i);

字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值
str = username;

五、BSTR、_bstr_t与CComBSTR
  CComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。  
char *转换到BSTR可以这样: BSTR
b=_com_util::ConvertStringToBSTR("数据"); 
//使用前需要加上头文件comutil.h
反之可以使用char *p=_com_util::ConvertBSTRToString(b);

六、variant转化为CString

VariantToString(_variant_t varValue)  
  {  
    if(varValue.vt!=VT_BSTR)  
     {
       varValue.ChangeType(VT_BSTR);  
    }
    return (char*)_bstr_t(varValue.bstrVal);  
 }

注意:加上头文件 #include "comdef.h"

Variant 转化为Long方法

VariantToLong(const VARIANT &var)
{
 long r;
 switch(var.vt)
 {
 case VT_UI2://USHORT
 r = var.uiVal;
 break;
 case VT_UI4://ULONG
 r = var.ulVal;
 break;
 case VT_INT://INT
 r = var.intVal;
 break;
 case VT_UINT://UINT
 r = var.uintVal;
 break;
 case VT_I4://LONG
 r = var.lVal;
 break;
 case VT_UI1://BYTE
 r = var.bVal;
 break;
 case VT_I2://SHORT
 r = var.iVal;
 break;
 case VT_R4://FLOAT
 r = (long)var.fltVal;
 break;
 case VT_R8://DOUBLE
 r = (long)var.dblVal;
 break;
 default:
 r = -1;//无法转换该值
 break;
 }
 return r;
}
时间: 2024-10-14 16:08:01

VC字符串转换常用函数的相关文章

vc字符串转换处理:(绝对精华,收集所有的例子)

vc字符串转换处理:(绝对精华,收集所有的例子) 1.头文件中要定义宏; #define   UNICODE         #define   _UNICODE     //////////////////// char   buf[128];    memset(buf,0,128);     strcpy(buf,"你好");     WCHAR   pCName[128];     memset(pCName,0,128);     MultiByteToWideChar(CP

Python列表、元组、字典和字符串的常用函数

Python列表.元组.字典和字符串的常用函数 列表方法 1.ls.extend(object) 向列表ls中插入object中的每个元素,object可以是字符串,元组和列表(字符串“abc”中包含3个元组),相当于ls和object合并.注意:object如果是整型,必须以列表的方式传入,不可以以整型或元组的方式传入 2.ls.append(object) 将object作为一个整体插入到ls最后,object可以是字符串,元组,列表和字典 3.ls.insert(index, object

go语音之进阶篇字符串操作常用函数介绍

下面这些函数来自于strings包,这里介绍一些我平常经常用到的函数,更详细的请参考官方的文档. 一.字符串操作常用函数介绍 1.Contains func Contains(s, substr string) bool 功能:字符串s中是否包含substr,返回bool值 示例: fmt.Println(strings.Contains("seafood", "foo")) fmt.Println(strings.Contains("seafood&qu

SQL注入截取字符串的常用函数

在盲注的情况下,往往需要一个一个字符的去猜解,即过程中需要截取字符串 在这里整理了一下一些常用函数 由于现阶段学习不够深入,整理分类不清楚具体,不过博主会慢慢进行完善 mid()函数 此函数为截取字符串一部分.mid(column_name,start,[length]) 参数 描述 column_name 必需.要提取字符的字段. start 必需.规定开始位置(起始值是 1). length 可选.要返回的字符数.如果省略,则 MID() 函数返回剩余文本. 例如:str="123456&q

PHP第八课 字符串拆分常用函数

课程概要: 通过这节课能够对字符串进行基本的操作. 字符串知识点: 1.字符串的处理介绍 2.常用的字符串输出函数 3.常用的字符串格式化函数 4.字符串比较函数 5.正则表达式在字符串中的应用 6.与per1兼用的正则表达式 1.pathinfo();//返回域名的path信息 2.parse_url(); 3.parse_str();//用来拆分参数用的 pathinfo(); <?php $str="http://blog.csdn.net/junzaivip"; $arr

python 列表,字典,元组,字符串,常用函数

飞机票 一.列表方法 1.ls.extend(object) 向列表ls中插入object中的每个元素,object可以是字符串,元组和列表(字符串"abc"中包含3个元组),相当于ls和object合并.注意:object如果是整型,必须以列表的方式传入,不可以以整型或元组的方式传入 2.ls.append(object) 将object作为一个整体插入到ls最后,object可以是字符串,元组,列表和字典 3.ls.insert(index, object) 将object作为一个

字符串函数 mysql 和sqlserver 中对于字符串的常用函数和区别

1. 对于字符串大小写的统一 mysql和sqlserver中都有同名函数lower()和upper(),但是mysql中还有另外一对函数,达到同样的目的,lcase()和ucase(),也就是英文中lowercase和uppercase的缩写,然后sqlserver中没有重复定义 2. 入参/字符串的拼接 concat() 原文地址:https://www.cnblogs.com/qianjinyan/p/10297519.html

mysql字符串的常用函数(截取和拼接)

#截取字符串(先正序取2个,再倒序取1个)SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('aaa-gg-cc-dd','-',2),'-',-1) #获取子表某个字段的拼接(如:goods_name;goods_name2;goods_name3)select o1.sn,group_concat(g1.goods_name separator ';') from orders o1left join goods_orders g1 on g1.order_id

VBA字符串处理常用函数汇总

len(str) 求长度 trim(str) 去掉两端空格 replace(str,a,b) 替换s中子串a,用b替代 left(str,a) 从左边取若干字符 right(str,a) 从右边取若干字符 mid(str,a,b) 从中间取若干字符 split(str,"s")把字符串按某个字符分割,返回包含指定数目的子字符串的从零开始的一维数组 instr(a,str1,str2) 从a位置在str1中查找字符串str2,返回位置 原文地址:https://www.cnblogs.c