對,有。
10年積累的成都網(wǎng)站制作、成都做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有昌平免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
#define?_CONVERSION_USES_THREAD_LOCALE
#include?atlbase.h
#include?atlconv.h
#include?stdio.h
#include?string.h
int?main()
{
USES_CONVERSION;
_acp?=?CP_ACP;
char?buf[3]?=?{0};
buf[0]?=?getchar();
buf[1]?=?getchar();
wchar_t?tmpbuf[2]?=?{0};
tmpbuf[0]?=?A2W(buf)[0];
_acp?=?CP_UTF8;
char?utf8buf[4];
strcpy(utf8buf,?W2A(tmpbuf));
int?i?=?0;
while(utf8buf[i]?!=?0)
{
printf("%02x?",?(unsigned?char)utf8buf[i]);
++i;
}
return?0;
}
如果不是VC6.0而是新的VC的話是新的寫法。
你可以輸入一個日進(jìn)去看看
int strtohex(const char *ch)
{
int i=0, tmp, result=0;
for(i=0; istrlen(ch); i++) /* 把字符一個一個轉(zhuǎn)成16進(jìn)制數(shù) */
{
if((ch[i]='0')(ch[i]='9'))
tmp = ch[i]-'0';
else if((ch[i]='A')(ch[i]='F'))
tmp = ch[i]-'A'+10;
else if((ch[i]='a')(ch[i]='f'))
tmp = ch[i]-'a'+10;
else
return -1; /* 出錯了 */
result = result*16+tmp; /* 轉(zhuǎn)成16進(jìn)制數(shù)后加起來 */
}
return result;
}
字符串轉(zhuǎn)換為hex,我用的這個。
其實 linux 和 windows 的系統(tǒng)函數(shù)都是C函數(shù),并且提供了GB2312toUTF-8的函數(shù),所以C語言是可以實現(xiàn)轉(zhuǎn)碼的。以下是windows的例子:int num = ::MultiByteToWideChar(CP_ACP, 0, "你好", -1, NULL, 0);wchar_t* m_arrayShort = new wchar_t[num];::MultiByteToWideChar(CP_ACP, 0, "你好", -1, m_arrayShort, num); int len = ::WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)m_arrayShort, num, 0, 0, NULL, NULL);char *tmpPT = new char[len+1];::WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)m_arrayShort, num, tmpPT, len, NULL, NULL);tmpPT[len] = 0;
用MultiByteToWideChar和WideCharToMultiByte可以做到編碼的轉(zhuǎn)換。
MultiByteToWideChar是一個windows API 函數(shù),該函數(shù)映射一個字符串到一個寬字符(unicode)的字符串。
函數(shù)原型:int MultiByteToWideChar(UINT CodePage,DWORD dwFlags,LPCSTR lpMultiByteStr,int cchMultiByte,LPWSTR lpWideCharStr,int cchWideChar);
參數(shù):CodePage:指定執(zhí)行轉(zhuǎn)換的字符集,這個參數(shù)可以為系統(tǒng)已安裝或有效的任何字符集所給定的值。你也可以指定其為下面的任意一值:CP_ACP:ANSI字符集;CP_MACCP:Macintosh代碼頁;CP_OEMCP:OEM代碼頁;CP_SYMBOL:符號字符集(42);CP_THREAD_ACP:當(dāng)前線程ANSI代碼頁;CP_UTF7:使用UTF-7轉(zhuǎn)換;CP_UTF8:使用UTF-8轉(zhuǎn)換。dwFlags:一組位標(biāo)記用以指出是否未轉(zhuǎn)換成預(yù)作或?qū)捵址ㄈ艚M合形式存在),是否使用象形文字替代控制字符,以及如何處理無效字符。你可以指定下面是標(biāo)記常量的組合,含義如下:MB_PRECOMPOSED:通常使用預(yù)作字符——就是說,由一個基本字符和一個非空字符組成的字符只有一個單一的字符值。這是缺省的轉(zhuǎn)換選擇。不能與MB_COMPOSITE值一起使用。MB_COMPOSITE:通常使用組合字符——就是說,由一個基本字符和一個非空字符組成的字符分別有不同的字符值。不能與MB_PRECOMPOSED值一起使用。MB_ERR_INVALID_CHARS:如果函數(shù)遇到無效的輸入字符,它將運(yùn)行失敗,且GetLastErro返回ERROR_NO_UNICODE_TRANSLATION值。MB_USEGLYPHCHARS:使用象形文字替代控制字符。組合字符由一個基礎(chǔ)字符和一個非空字符構(gòu)成,每一個都有不同的字符值。每個預(yù)作字符都有單一的字符值給基礎(chǔ)/非空字符的組成。在字符è中,e就是基礎(chǔ)字符,而重音符標(biāo)記就是非空字符。函數(shù)的缺省動作是轉(zhuǎn)換成預(yù)作的形式。如果預(yù)作的形式不存在,函數(shù)將嘗試轉(zhuǎn)換成組合形式。標(biāo)記MB_PRECOMPOSED和MB_COMPOSITE是互斥的,而標(biāo)記MB_USEGLYPHCHARS和MB_ERR_INVALID_CHARS則不管其它標(biāo)記如何都可以設(shè)置。lpMultiByteStr:指向?qū)⒈晦D(zhuǎn)換字符串的字符。cchMultiByte:指定由參數(shù)lpMultiByteStr指向的字符串中字節(jié)的個數(shù)。如果lpMultiByteStr指定的字符串以空字符終止,可以設(shè)置為-1(如果字符串不是以空字符中止,設(shè)置為-1可能失敗,可能成功),此參數(shù)設(shè)置為0函數(shù)將失敗。lpWideCharStr:指向接收被轉(zhuǎn)換字符串的緩沖區(qū)。cchWideChar:指定由參數(shù)lpWideCharStr指向的緩沖區(qū)的寬字符個數(shù)。若此值為零,函數(shù)返回緩沖區(qū)所必需的寬字符數(shù),在這種情況下,lpWideCharStr中的緩沖區(qū)不被使用。
返回值:如果函數(shù)運(yùn)行成功,并且cchWideChar不為零,返回值是由lpWideCharStr指向的緩沖區(qū)中寫入的寬字符數(shù);如果函數(shù)運(yùn)行成功,并且cchWideChar為零,返回值是接收到待轉(zhuǎn)換字符串的緩沖區(qū)所需求的寬字符數(shù)大小。如果函數(shù)運(yùn)行失敗,返回值為零。若想獲得更多錯誤信息,請調(diào)用GetLastError函數(shù)。它可以返回下面所列錯誤代碼:ERROR_INSUFFICIENT_BUFFER;ERROR_INVALID_FLAGS;ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。
WideCharToMultiByte,該函數(shù)映射一個unicode字符串到一個多字節(jié)字符串。函數(shù)原型:int WideCharToMultiByte(UINT CodePage, //指定執(zhí)行轉(zhuǎn)換的代碼頁DWORD dwFlags, //允許你進(jìn)行額外的控制,它會影響使用了讀音符號(比如重音)的字符LPCWSTR lpWideCharStr, //指定要轉(zhuǎn)換為寬字節(jié)字符串的緩沖區(qū)int cchWideChar, //指定由參數(shù)lpWideCharStr指向的緩沖區(qū)的字符個數(shù)LPSTR lpMultiByteStr, //指向接收被轉(zhuǎn)換字符串的緩沖區(qū)int cchMultiByte, //指定由參數(shù)lpMultiByteStr指向的緩沖區(qū)最大值LPCSTR lpDefaultChar, //遇到一個不能轉(zhuǎn)換的寬字符,函數(shù)便會使用pDefaultChar參數(shù)指向的字符LPBOOL pfUsedDefaultChar //至少有一個字符不能轉(zhuǎn)換為其多字節(jié)形式,函數(shù)就會把這個變量設(shè)為TRUE);參數(shù):CodePage:指定執(zhí)行轉(zhuǎn)換的代碼頁,這個參數(shù)可以為系統(tǒng)已安裝或有效的任何代碼頁所給定的值。你也可以指定其為下面的任意一值:CP_ACP:ANSI代碼頁;CP_MACCP:Macintosh代碼頁;CP_OEMCP:OEM代碼頁;CP_SYMBOL:符號代碼頁(42);CP_THREAD_ACP:當(dāng)前線程ANSI代碼頁;CP_UTF7:使用UTF-7轉(zhuǎn)換;CP_UTF8:使用UTF-8轉(zhuǎn)換返回值:如果函數(shù)運(yùn)行成功,并且cchMultiByte不為零,返回值是由 lpMultiByteStr指向的緩沖區(qū)中寫入的字節(jié)數(shù);如果函數(shù)運(yùn)行成功,并且cchMultiByte為零,返回值是接收到待轉(zhuǎn)換字符串的緩沖區(qū)所必需的字節(jié)數(shù)。如果函數(shù)運(yùn)行失敗,返回值為零。若想獲得更多錯誤信息,請調(diào)用GetLastError函數(shù)。它可以返回下面所列錯誤代碼:ERROR_INSUFFICIENT_BJFFER;ERROR_INVALID_FLAGS;ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。注意:指針lpMultiByteStr和lpWideCharStr必須不一樣。如果一樣,函數(shù)將失敗,GetLastError將返回ERROR_INVALID_PARAMETER的值?!indows CE:不支持參數(shù)CodePage中的CP_UTF7和CP_UTF8的值,以及參數(shù)dwFlags中的WC_NO_BEST_FIT_CHARS值。
標(biāo)準(zhǔn)庫里沒有。但搜了一下網(wǎng)上應(yīng)該找到不少,比如這個:
std::string?iso_8859_1_to_utf8(std::string?str)
{
string?strOut;
for?(std::string::iterator?it?=?str.begin();?it?!=?str.end();?++it)
{
uint8_t?ch?=?*it;
if?(ch??0x80)?{
strOut.push_back(ch);
}
else?{
strOut.push_back(0xc0?|?ch??6);
strOut.push_back(0x80?|?(ch??0x3f));
}
}
return?strOut;
}
《C語言將UTF-8編碼的txt文件改成ANSI編碼》百度網(wǎng)盤免費(fèi)下載
鏈接:
提取碼: id61? ?
C語言將UTF-8編碼的txt文件改成ANSI編碼