Ⅰ 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);
就可以了