字符之间的转化

Unicode下字符经常需要转化,还是比较麻烦的。

但是Unicode支持跨平台 而且系统内部也使用Unicode  因此我们一般仍需要使用该编码方式。

Unicode即为宽字节,在宽字节中,英文和中文都占两个字节。而多字节中,英文占一个字节,中文为两个。单字节中每个都是占一个字节,如ASCII码。

记录部分转化方式,以后会用到。

1.Unicode转为多字节

方法:WidecharToMultiByte()

char * pathname= new char[MAX_PATH] ;
WCHAR  *pathname_L=  new WCHAR[MAX_PATH];
GetCurrentDirectory(MAX_PATH,pathname_L);//获取当前工作路径
WideCharToMultiByte( CP_ACP, 0, pathname_L, -1,   pathname, MAX_PATH, NULL, NULL ); 

2.CString 转为string

CString cstr = _T("xxxx");
string str = cstr .GetBuffer(0);

3.int转为CString

int num = 1;
CString cstr;
cstr.Format(_T("%d"),num);

4. CString转为char*

LPCTSTR为TCHAR *

LPTSTR为 const TCHAR*

而在Unicode下,TCHAR相当于wchar_t。因此,LPTSTR为wchar_t*。 LPCTSTR相当于const wchar_t*

在Ansi下,TCHAR相当于char。因此,LPTSTR为char*,LPCTSTR相当于const char*

Ansi下第一种方法 可以强制转化,用宏LPCTSTR和LPTSTR 。但并不介意,容易出现乱码。

<pre name="code" class="cpp">CString cstr;
const char *ch =  (LPTSTR)(LPCTSTR)cstr;

unicode下 ,第一种方法可用WidecharToMultiByte()

第二种方法可用

CString str = _T("xxx");
USES_CONVERSION;
 //调用函数,T2A和W2A均支持ATL和MFC中的字符转换
char * pFileName = T2A(str);
//char * pFileName = W2A(str); //也可实现转换

这种方法需加头文件#include <afxpriv.h>

用uses_convesion时要注意,该方法占用一定内存,在函数结束时才释放。因此,若需要在一个大循环内频繁调用该函数,则可能导致内存崩溃。可以通过单独建立一个转化函数来解决该问题。

5 const char*转为char*

const char * cc = const_char<char *>(c.c_str());//c为const char*
时间: 2024-10-03 04:30:12

字符之间的转化的相关文章

c++数字和字符之间的转化

关于C++中数与字符之间的转化 在c++中我们经常遇到需要把一个数变成字符,或者把字符变为一个数,c++中没有直接的转化函数,故我们需要自己去写函数去转化,这里我将介绍两种比较简单的方法: 法一: sprintf()函数把一个数字如何变成一个字符串: float a=23.309774; char ss[8]; sprintf(ss,"%lf",a); 使用这种方法直接将数字a变成了字符串ss,值得注意的是,这种是把数字转化为数组,可以通过ss[i]这种方式提取任何元素,ss数组的大小

cocos2d-js 入门一 ([isNaN()和isFinite(),字符和Number之间的转化)

isNaN() : 用于检查其参数是否是非数字值.// 提示:是非数字哦.(not a number)document.write(isNaN(0) )  //返回falsedocument.write(isNaN(5-2) ) //返回falsedocument.write(isNaN ("Hello") ) //返回trueisFinite(number) 函数用于检查其参数是否是无穷大.如果number是有限的,则返回true. 如果 number 是 NaN(非数字)或者是无穷

Java字符编码的转化问题

概述: 我想字符串的编码问题的确会困扰到非常多开发人员.我近期也是被困扰到了. 问题是这种,我们通过二维码扫描来获得二维码中的信息.可是.我们的二维码的产生过程却是"多样化"的.即在产生二维码的时候是以不同的字符串编码类型进行编码的.比方,GBK.GB2312.UTF-8等等.而这些不同的编码类型会产生不同的字节.在Java中.GBK和GB2312都是1个汉字占2个字节,UTF-8是1个汉字占3个字节.而ISO编码则是1上汉字1个字节.这样一来,我们在扫描二维码的时候就会出现一些&qu

二进制与十进制的转化,bool str int 之间的转化,str的常用操作,

1.基础数据类型总览(7种) int: 整型,用于进行+-*/运算 str: 存储少量的数据;可加str,可乘数字,可切片,可进行9种常用操作 bool: True False 判断真假 list: 存储大量的数据;可进行增删改查 tuple: 存储大量的数据,不可改变里面的元素 dict: 存储大量的关联型的数据,查询速度非常快;可进行增删改查 set: 自动去重;交并差集 2.int-二进制与十进制之间的相互转换 十进制转二进制 采用"除2取余,逆序排列"法.具体做法是:用2整除十

java类继承总结一 父类类型与子类类型之间的转化问题(转)

java类继承总结一 父类类型与子类类型之间的转化问题 本文将通过一个实例描述父类类型与子类类型之间的转化问题,这个很特殊的问题常常会导致一些潜在的危险,让你整整一个晚上都在调试程序以解决一个让人抓狂的java.lang.ArrayStoreException异常. 1. 子类数组的引用可以装换为超类数组的引用 2. 子类的引用child可以转换为父类的引用parent(这里假设parent是父类对象,child是子类对象),但却不可以通过 parent调用child的特有方法 class Em

String和数字之间的转化

主要是JDK的代码,还是比较的经典,值得一看,例如: package alg; /** * @author zha 字符串之间的转化 */ public class Alg3StringToint { /** * @param args */ public static void main(String[] args) { String intv = "1232192373290"; // int value = Integer.parseInt(intv); // System.ou

js数字、字符串、数组之间的转化

1.数组转字符串 var a, b; a = new Array(0,1,2,3,4); b = a.join("-"); 2.字符串转数组 var s = "abc,abcd,aaa"; ss = s.split(","); 3.数字转字符串toString var i = 10; var s = i.toString(); 4.字符串转数字 parseInt(字符串) parseInt("ssss999"); //错误 输

matlab各类数据l图像之间的转化

matlab各类数据图像之间的转化 rgb类型转化为二值的过程如下: 1.采用命令im2double将rgb类型转化三维的double >> str='E:\programing\Eigenface_PAC\Face\image_0001.jpg'; >> A=imread(str); >> imshow(A); 2.用命令imresize调整图像的尺寸大小 >> B=imresize(A,[529 529]); >> imshow(B); 3.

shell脚本,每5个字符之间插入&quot;|&quot;,行末不插入“|”。

文本aaaaabbbbbcccccdddd eeeeefffffkkkkkvvvv nnnnnggggg 希望得到的结果如下: aaaaa|bbbbb|ccccc|dddd eeeee|fffff|kkkkk|vvvv nnnnn|ggggg 匹配要求:希望每5个字符之间插入一个"|",如果该行的字符数量正好是5的倍数,行末就不插入"|"了. 解题如下: [[email protected] zuoye2]# cat fileaaaaabbbbbcccccdddde