导航:首页 > 操作系统 > linuxwchar转换

linuxwchar转换

发布时间:2022-07-06 19:15:39

Ⅰ WCHAR 转换成 LPSTR 的问题

inti;
chara[]="12345";
i=atoi(a);

Ⅱ 如何在linux系统实现字符编码转换

Linux下提供了iconv实现这一功能,在Linux

shell
环境下,iconv用法如下:
iconv
-f
fromconde
-t
tocode
-f:
指定需要转换的文本编码
-t:
指定目标文本编码
我们也可以用
-l
列举出所有已知的字符编码集合
iconv
-l
具体用法可以通过帮助函数
iconv
--help来详细了解
另外,我们也可以在程序中直接使用该函数实现文本的编码转换
#ifndef
__CODE_CONVERTER
#define
__CODE_CONVERTER
#ifdef
WIN32
#include
<windows.h>
#else
#include
<iconv.h>
#endif
class
CodeConverter
{
private:
#ifndef
WIN32
iconv_t
m_cd;
#endif
const
char*
m_pszFromCode;
const
char*
m_pszToCode;
public:
CodeConverter()
{
m_pszFromCode
=
NULL;
m_pszToCode
=
NULL;
#ifndef
WIN32
m_cd
=
0;
#endif
}
~CodeConverter()
{
#ifndef
WIN32
iconv_close(m_cd);
#endif
}
bool
Initialize(const
char
*pszToCode,
const
char
*pszFromCode);
size_t
Convert(char*
inBuf,
size_t
inBytesLeft,
char*
outBuf,
size_t
outBytesLen);
};
#endif
#include
<string.h>
#include
<stdlib.h>
#include
<stdio.h>
#include
"code_converter.h"
#include
<errno.h>
bool
CodeConverter::Initialize(const
char*
pszToCode,
const
char*
pszFromCode)
{
if(pszFromCode
==
NULL
||
pszToCode
==
NULL)
return
false;
m_pszFromCode
=
pszFromCode;
m_pszToCode
=
pszToCode;
#ifndef
WIN32
m_cd
=
iconv_open(m_pszToCode,m_pszFromCode);
if(m_cd
==
(iconv_t)-1)
{
printf("cannot
open
iconv
descripter\n");
return
false;
}
#endif
return
true;
}
size_t
CodeConverter::
Convert(char*
inBuf,
size_t
inBytesLeft,
char*
outBuf,
size_t
outBytesLen)
{
int
nRealLen
=
0;
#ifdef
WIN32
if(stricmp(m_pszFromCode,"UNICODE")
==
0)
{
nRealLen
=
WideCharToMultiByte(CP_ACP,0,(PWCHAR)inBuf,
inBytesLeft,
(PCHAR)outBuf,
outBytesLen,NULL,NULL);
}
if(stricmp(m_pszFromCode,"gb2312")
==
0)
{
nRealLen
=
MultiByteToWideChar(CP_ACP,0,(PCHAR)inBuf,inBytesLeft,(PWCHAR)outBuf,
outBytesLen);
}
#else
size_t
outBytesLeft
=
outBytesLen;
size_t
ret
=
0;
while
(1)
{
ret
=
iconv(m_cd,
&inBuf,
&inBytesLeft,
&outBuf,
&outBytesLeft);
if
(ret
==
0)
break;
if
(ret
==
(size_t)-1)
{
printf("iconv
error
aaa:
%s\n",strerror(errno));
return
-1;
}
inBuf++;
inBytesLeft--;
}
nRealLen
=
outBytesLen-outBytesLeft;
outBuf[nRealLen]=0;
#endif
return
nRealLen;
}

Ⅲ 如何将WCHAR 转成 std:string

提示说Label::setLabel”: 不能将参数 1 从“wchar_t *”转换为“const std::string &” 既然Label::setLabel要求的参数是std::string, 那么你为什么要把label转换为宽字符呢?

Ⅳ Linux下宽字符串输出问题,求解...

setlocale( LC_ALL, "chs " );
看看是不是没有调用这个函数
for example
char str[1024] = "abc123故障短路切换";
wchar_t array[1024]={0};
setlocale(LC_ALL,"zh_CN.GB2312");
/*from chinese to Unicode*/
if((ret=mbstowcs(array, str, strlen(str)))==-1)
{
printf("error\n");
}

goodluck

Ⅳ 100财富给牛逼之人!就没人知道在linux下用c语言如何将汉字的unicode编码转化为汉字吗

除了iconv命令,我们在linux系统下的man page的第三节还可以看到一组iconv函数。它们分别是
iconv_t iconv_open(const char *tocode, const char *fromcode);
size_ticonv(iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
int iconv_close(iconv_t cd);
iconv_open函数用来打开一个编码转换的流,iconv函数的作用是实际进行转换,iconv_close函数的作用就是关闭这个流。实际用法参见下面的例子,下面是一个将UTF-8码转换成GBK码的例子,我们假设已经有了一个uft8编码的输入缓冲区inbuf以及这个缓冲区的长度inlen。
iconv_t cd = iconv_open( "GBK", "UTF-8");
char *outbuf = (char *)malloc(inlen * 4 );
bzero( outbuf, inlen * 4);
char *in = inbuf;
char *out = outbuf;
size_t outlen = inlen *4;
iconv(cd, &in, (size_t *)&inlen, &out,&outlen);
outlen = strlen(outbuf);
printf("%s\n",outbuf);
free(outbuf);
iconv_close(cd);

Ⅵ 如何把wchar_t类型的汉子转换为char*

char *strA = FileName.GetBuffer();

补充回答:
如果楼主不需要wchar_t*类型的指针的话,可以:
AnsiString tp;
wchar_t *s;
char *d;
tp=s;
d=tp.c_str();

也可使用WideCharToString(wchar_t * Source);函数转换
如果是数字或者字母的话就直接强制类型转换:)

补充:
楼主用这个试试,中文应该也可以:
WideCharToString(wchar_t * Source);

Ⅶ 用MultiByteToWideChar将char转换为wchar就代表将ansi转换为utf-8了吗那在linux下用wcstombs转回来

在linux下用iconv

Ⅷ 如何将char*转换为wchar

C++标准中,wchar_t是宽字符类型,每个wchar_t类型占2个字节,16位宽。汉字的表示就要用到wchar_t 。char,我们都知道,占一个字节,8位宽。其实知道了这个以后,要在wchar_t 和 char两种类型之间转换就不难实现了。

wchar_t 转换为char 的代码如下:

有如下的wchar_t和char变量

wchar_t w_cn = '中';
char c_cn[2] = {'0'} ;

char *C2W(wchar_t w_cn , char c_cn[2])

{

//following code convert wchar to char
c_cn[0] = w_cn >> 8 ;
c_cn[1] = w_cn ;
c_cn[2] = '\0';

return c_cn ;

}

其中需要注意的是一个16位的wchar_t需要用两个8位的char来存储之。我们可以发现另外一个问题,wchar_t的高位字节应该存储在char数组的低位字节。(这里没有仔细研究了,觉得怪怪的)。

这是完成了wchar_t到char的转化

Ⅸ Linux下怎么将wchar

CString是基于TCHAR数据类型的对象。如果在你的程序中定义了符号_UNICODE,则TCHAR被定义为类型wchar_t,即16位字符类型;否则,TCHAR被定义为char,即8位字符类型。在UNICODE方式下,CString对象由16位字符组成。非UNICODE方式下,CString对象由8位字符组成。当不使用_UNICODE时,CString是多字节字符集(MBCS,也被认为是双字节字符集,DBCS)。注意,对于MBCS字符串,CString仍然基于8位字符来计算,返回,以及处理字符串,并且你的应用程序必须自己解释MBCS的开始和结束字节。/////////////////////////所以两者是不需要转换的,不知你怎么会出现需要转换的情况??难道你在非UNICODE的情况下要转换成wchar_t?那就要2楼所用的函数MultiByteToWideChar

Ⅹ wchar_t到QString的转换方法

先定义一个wchar_t数组,然后随便定义一个QString :
QString ans;
ans.toWcharArray(wchar_t *a);
就可以了

阅读全文

与linuxwchar转换相关的资料

热点内容
北京电信服务器托管云空间服务器 浏览:369
一般学编程有必要吗 浏览:753
机器人编程方法 浏览:992
表盘编程gt 浏览:9
java源代码阅读 浏览:736
程序员用什么键盘罗技 浏览:169
为什么安卓手机每天都要更新app 浏览:707
java怎么成为程序员 浏览:290
西门子s7200编程电缆怎么连接 浏览:532
下载网页中的pdf文件 浏览:90
音乐缓存文件夹的软件 浏览:396
Dkms编译打印机驱动 浏览:996
解压缩文件操作异常 浏览:556
等待代码编译时你会干嘛 浏览:493
单片机c语言中变量右移8位 浏览:82
解压的一个小短片 浏览:831
二级压缩空压机哪家好排行 浏览:743
基于单片机超声波测距 浏览:130
模拟随机红包算法 浏览:387
程序员接外包网站 浏览:138