c语言wchar转化为char_烦人的char*,wchar_t*或者WCHAR转换

//将char*转化为whcar_t*,其中lpwchartStr需要释放

int charTowchar_t(wchar_t** lpwchartStr,char* lpcharStr,int

*len)

{

wchar_t* buffer = nullptr;

if(lpcharStr)

{

int nu = strlen(lpcharStr);

int n = MultiByteToWideChar(CP_ACP,0,(const char

*)lpcharStr,int(nu),NULL,0);

buffer =0;

buffer = new wchar_t[n+1];

//if(n>=len) n=len-1;

::MultiByteToWideChar(CP_ACP,0,(const char

*)lpcharStr,int(nu),buffer,int(n));

buffer[n] = 0;

*lpwchartStr = buffer;

*len = n;

return 0;

}

*len=0;

return -1;

}

用完用delete释放lpwchartStr。

//将wchar_t* 转成char*,其中lpcharStr需要释放

int wchar_tTochar(char** lpcharStr,wchar_t* lpwchartStr,int

*len)

{

if (!lpwchartStr)

{

*len=0;

return -1;

}

char *buffer = nullptr;

int nlength=wcslen(lpwchartStr);

//获取转换后的长度

int nbytes = WideCharToMultiByte( 0, // specify the code page

used to perform the conversion

0,  // no special flags to handle unmapped

characters

lpwchartStr,  // wide

character string to convert

nlength,  // the number of wide characters

in that string

NULL,  // no output buffer given, we just want to know

how long it needs to be

0,

NULL,  // no replacement character given

NULL );  // we don't want

to know if a character didn't make it through the translation

buffer = new char[nbytes+1];

WideCharToMultiByte( 0, // specify the code page used to

perform the conversion

0,  // no special flags to handle unmapped

characters

lpwchartStr,  // wide character string to

convert

nlength,  // the number of wide characters

in that string

buffer, // put the output ascii characters at the end of the

buffer

nbytes,  // there is at

least this much space there

NULL,  // no replacement character given

NULL );

buffer[nbytes]=0;

*lpcharStr = buffer;

*len = nbytes;

return 0;

}

用完之后记得delete释放lpcharStr;

---------------------------------------------------------------------------------

下面一部分引自“http://blog.csdn.net/oceanwavewyt/article/details/5612392”

汉字和ascii不同,汉字是多字节编码方式,ascii只用一个字节表示,所以在用c语言提供的strlen函数得到的长度是字节长度;以下都是utf-8编码方式,为了得到一个字符(汉字和ascii)有几种处理方式:

1. 自己写程序判断是否为汉字,通过第一个字节判断,以下是一部分代码:

int isHanzi(int a)

{

int t = a &

0xE0;

if(t==0xE0){

printf("汉字1/n");

return 3;

}

t = a &

0xC0;

if(t==0xC0){

return 2;

}

t = a &

0xF0;

if(t==0xF0){

return 4;

}

t = a &

0xF8;

if(t==0xF8){

return 5;

}

t = a &

0xFC;

if(t==0xFC){

return 2;

}

printf("不是/n");

return 1;

}

2. 用内置的wchar_t类型

1). wchar_t ws[]=L"北京bus";

这样用wcslen(ws)结果就为 5,

int i;

setlocale(LC_ALL, "zh_CN.UTF-8");

int

len=wcslen(ws);

for(i=0; i

printf("%lc/n",ws[i]);

}

这是必须设置

本地编码方式 setlocale(LC_ALL,"zh_CN.UTF-8");

2).读一个文件后得到的数据,要使数据为wchar_t

,就需要进行字符串转换了.用到函数 mbstowcs,以下是我写的一个读文本文 件然后转换的程序

//读一个文本文件

FILE

*fp = fopen("/home/wyt/data.txt","r");

char

buffer[1024];

size_t realLen=0,curLen,length=2048;

char

*data=(char *)malloc(sizeof(char)*length);

char

*tmp;

while(!feof(fp)){

curLen = fread(buffer,sizeof(char),1024,fp);

realLen+=curLen;

if(length<=realLen){

tmp =

(char *)malloc(sizeof(char)*(length+2048));

memcpy(tmp,data,sizeof(char)*length);

length+=2048;

free(data);

data=tmp;

}

strcat(data,buffer);

}

data[realLen]='/0';

printf("%s",data);

fclose(fp);

wchar_t  *data2 = (wchar_t

*)malloc(sizeof(wchar_t)*length);

//转换成wchar_t类型

mbstowcs(data2,data,length);

size_t ln=wcslen(data2);

for(i=0;i

printf("%lc/n",data2[i]);

}

如果

wchar_t 转换为char 类型,可以用函数 wcstombs

void out(wchar_t name)

{

if(name<128){

char n[2];

wcstombs(n,&name,sizeof(wchar_t));

n[1]='/0';

printf("%lc,%s,%d/n",name,n,strlen(n));

}else{

char n[3];

wcstombs(n,&name,sizeof(wchar_t));

n[3]='/0';

printf("%lc,%s,%d/n",name,n,strlen(n));

}

//n[3]='/0';

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
算法,对风险进行预测和控制,从而实现风险管理和风险控制。常见的在 C 语言中,需要使用标准库函数进行转换。可以使用以下函数之一来进行转换: 1. mbstowcs:该函数可以将多字节字符转换为宽字符。 2. wcstombs:该函数可以风险控制应用包括信用评估、欺诈检测和投资风险控制等。 四、机将宽字符转换为多字节字符。 例如,可以使用以下代码将 char* 转换为 wchar_t*: ```c #include <stdlib.h> #include <string.h> #include <wchar.h> wchar_t* widen(const char* str) { size_t len = strlen(str) + 1; wchar_t* wide_str = (wchar_t*)malloc(len * sizeof(wchar_t)); 器学习最新进展 机器学习技术在近年来得到了快速发展,不断涌 mbstowcs(wide_str, str, len); return wide_str; } ``` 然后,可以使用以下代码将 wchar现出一些新的算法和应用。以下是机器学习的一些最新进展: 1. 深_t* 转换char*: ```c #include <stdlib.h> #include <string.h> #include <wchar.h> char* narrow(const wchar_t* str) { size_t len = wcslen(str) + 1; char* narrow_str = (char*)度学习 深度学习是指通过多层神经网络进行学习和分析的一种机器学习malloc(len); wcstombs(narrow_str, str, len); return narrow_str; } ``` 示例代码如下: 方法。相比传统的机器学习算法,深度学习可以自动提取数据中的特征信息```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <wchar.h> // 将 char* 转换为 wchar_t* wchar_t* widen(const char* str) { size_t len = strlen(str) + 1; wchar_t,从而提高模型的准确性和泛化能力。 2. 异常检测 异常检测是指* wide_str = (wchar_t*)malloc(len * sizeof(wchar_t)); mbstowcs(wide_str, str, len); 通过机器学习算法,对数据中的异常和离群点进行识别和分析的一种方法。近 return wide_str; } // 将 wchar_t* 转换char* char* narrow(const wchar_t* str) { size_t len = wcslen(str) + 1; char* narrow_str = (char*)malloc(len); wcstombs(narrow_str年来,异常检测在金融、医疗和工业等领域得到了广泛应用。 3. 迁, str, len); return narrow_str; } int main() { char* str = "Hello, world!"; wchar_t* wide_str = widen(str); wprintf(L"wide_str: %ls\n", wide_str); char* narrow_str = narrow(w移学习 迁移学习是指通过在不同领域的数据上进行学习和分析,从而提ide_str); printf("narrow_str: %s\n", narrow_str); free(wide_str); free(narrow_str); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值