自己写unicode转换ascii码,wchar*到char*

对于ascii码的char其实就是unicode码wchar的首个字节码,

如wchar[20] = "qqqq"; 在内存中排码其实是char的‘q‘ ‘\0‘这类,因此我们如果自己写unicode码转换为ascii的char,只需要取其首字节即可,如下本人写了一个wchar到char的转换的函数。由于代码简单,加上了内存泄露测试方式。

#include <stdio.h>
#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_CLIENTBLOCK
#endif

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include <tchar.h>
#include <Windows.h>
#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif

char* UnicodeToMultibyte(WCHAR *wStr)
{

	if (NULL != wStr)
	{
		int nLen = wcslen(wStr);
		char *pStr = new char[nLen + 1];
		int i = 0;
		for (; i < nLen; ++i)
		{
			(pStr)[i] = (char)*(wStr + i);
		}
		(pStr)[i] = '\0';
		printf("%s\n", pStr);
		return pStr;
	}
	return NULL;
}
int main()
{
	_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

	/*char *str = new char[100];*/
	WCHAR wStr[250] = L"qqqqqqqqqqqqq";
	char szTemp[250] = _T("wwwwwwwwwwwww");
	char* pTemp = UnicodeToMultibyte(wStr);
	strcpy(szTemp, pTemp);
	delete pTemp;		//注意,小心内存泄露
	printf("%s\n", szTemp);

	return 0;

}

当然也可以通过windows的转换函数,这个msdn上有详解就不解释啦

char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)
{
	LPSTR pszOut = NULL;
	if (lpwszStrIn != NULL)
	{
		int nInputStrLen = wcslen (lpwszStrIn);  

		// Double NULL Termination
		int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;
		pszOut = new char [nOutputStrLen];  

		if (pszOut)
		{
			memset (pszOut, 0x00, nOutputStrLen);
			WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);
		}
	}
	return pszOut;
}
时间: 2024-07-30 20:14:12

自己写unicode转换ascii码,wchar*到char*的相关文章

创建文件夹并解决解决unicode和ASCII码转换的问题

# -*- coding: UTF-8 -*-import sysimport timeimport os #解决unicode和ASCII码转换的问题reload(sys) #解决unicode和ASCII码转换的问题sys.setdefaultencoding('utf8') #解决unicode和ASCII码转换的问题 context = '''hello world'''f = open("hello.txt", 'a+')f.write(context)f.close()da

Unicode 和ASCII码

在Unicode中:汉字"字"对应的数字是23383(十进制),十六进制表示为5B57.在Unicode中,我们有很多方式将数字23383表示成程序中的数据,包括:UTF-8.UTF-16.UTF-32.UTF是"UCS Transformation Format"的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据.例如,"汉字"对应的数字是0x6c49和0x5b57,而编码的程序数据是: 1 2 3

C语言字符转换ASCII码

//函 数 名:CharToHex()//功能描述:把ASCII字符转换为16进制//函数说明://调用函数://全局变量://输    入:ASCII字符//返    回:16进制/////////////////////////////////////////////////////////////////////unsigned char CharToHex(unsigned char bHex){    if((bHex>=0)&&(bHex<=9))        b

JS 字符unicode转换函数

/**js Unicode编码转换*/ var decToHex = function(str) {    var res=[];    for(var i=0;i < str.length;i++)        res[i]=("00"+str.charCodeAt(i).toString(16)).slice(-4);    return "\\u"+res.join("\\u");}var hexToDec = function(s

[PHP]chr和ord函数实现字符串和ASCII码互转

chr和ord函数是用来字符串和ASCII码互转的.  ASCII码是计算机所能显示字符的编码,它的取值范围是0-255,其中包括标点.字母.数字.汉字等.在编程过程中,经常把指定的字符转化为ASCII码进行比较. 下面是PHP提供的转换ASCII码和字符的函数. 1.chr()函数 该函数用于将ASCII码值转化为字符串.其函数声明如下: string chr (int ascii); 2.ord()函数 该函数用于将字符串转化为ASCII码值.其函数声明如下: int ord(string 

UNICODE与ASCII

1.ASCII的特点 ASCII 是用来表示英文字符的一种编码规范.每个ASCII字符占用1 个字节,因此,ASCII 编码可以表示的最大字符数是255(00H—FFH).这对于英文而言,是没有问题的,一般只什么用到前128个(00H--7FH,最高位为0).而最高位为1 的另128 个字符(80H—FFH)被称为“扩展ASCII”,一般用来存放英文的制表符.部分音标字符等等的一些其它符号. 但是对于中文等比较复杂的语言,255个字符显然不够用.于是,各个国家纷纷制定了自己的文字编码规范,其中中

js ASCII码 转 字符 ,字符 转 ASCII码

//ASCII码转换字符 function asciiToStr(code) { //alert("code:" + code + "\r\n字符:" + String.fromCharCode(code)); return String.fromCharCode(code); } //字符转换ASCII码 function strToAscii(str) { return str.charCodeAt(); }

还是编码 汉字(GB2312和GBK)的ASCII码对照表

GB2312和GBK每一个汉字由2个字节组成,这2个字节的ASCII码大小分别是:gb2312: high8 = 0xa1-->0xfe (161 - 254)low8 = 0xa1-->0xfe  (161 - 254)gbk: high8 = 0x80-->0xfe (128 - 254)low8 = 0x40-->0xfe (64 - 254) GB2312和GBK的区别:http://zhidao.baidu.com/question/40269499 汉字ASCII对照表

字符转换(2,8,10,16进制,ASCII码)

罗列了一些用到的,各进制 以及 ASCII 间的转换,记录备忘 一,先说说 2,8,10 ,16 各进制之间的转化 System.Convert类中提供了较为全面的各种类型.数值之间的转换功能: 几个比较常用的方法  1,Convert.ToInt32(string value, int fromBase)  :将字符串转换为数字(如2进制0010>也就是2^1=2)  fromBase: 顾名思义参数的进制(2,,8,10,16)     2,Convert.Tostring(int valu