日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中ASCII、unicode与Utf8之间的相互转化

發布時間:2024/4/11 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中ASCII、unicode与Utf8之间的相互转化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

頭文件:UTN.h

[cpp]?view plaincopy print?
  • #pragma?once??
  • #include?"stdafx.h"??
  • #include?"windows.h"??
  • #include?<iostream>??
  • #include?<string>??
  • using?namespace?std;??
  • ??
  • //**************string******************//??
  • //?ASCII與Unicode互轉??
  • wstring?AsciiToUnicode(const?string&?str);??
  • string??UnicodeToAscii(const?wstring&?wstr);??
  • //?UTF8與Unicode互轉??
  • wstring?Utf8ToUnicode(const?string&?str);??
  • string??UnicodeToUtf8(const?wstring&?wstr);??
  • //?ASCII與UTF8互轉??
  • string??AsciiToUtf8(const?string&?str);??
  • string??Utf8ToAscii(const?string&?str);??
  • //**************CString******************//??
  • //?ASCII與Unicode互轉??
  • CStringW????AsciiToUnicode_CSTR(const?CStringA&?str);??
  • CStringA????UnicodeToAscii_CSTR(const?CStringW&?wstr);??
  • //?UTF8與Unicode互轉??
  • CStringW????Utf8ToUnicode_CSTR(const?CStringA&?str);??
  • CStringA????UnicodeToUtf8_CSTR(const?CStringW&?wstr);??
  • //?ASCII與UTF8互轉??
  • CStringA????AsciiToUtf8_CSTR(const?CStringA&?str);??
  • CStringA????Utf8ToAscii_CSTR(const?CStringA&?str);??
  • /************string-int***************/??
  • //?string?轉?Int??
  • int?StringToInt(const?string&?str);??
  • string?IntToString(int?i);??
  • string?IntToString(char?i);??
  • string?IntToString(double?i);??



  • cpp文件:UTN.cpp

    [cpp]?view plaincopy print?
  • #pragma?once??
  • #include?"stdafx.h"??
  • #include?"UTN.h"??
  • ??
  • wstring?AsciiToUnicode(const?string&?str)?{??
  • ????//?預算-緩沖區中寬字節的長度????
  • ????int?unicodeLen?=?MultiByteToWideChar(CP_ACP,?0,?str.c_str(),?-1,?nullptr,?0);??
  • ????//?給指向緩沖區的指針變量分配內存????
  • ????wchar_t?*pUnicode?=?(wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);??
  • ????//?開始向緩沖區轉換字節????
  • ????MultiByteToWideChar(CP_ACP,?0,?str.c_str(),?-1,?pUnicode,?unicodeLen);??
  • ????wstring?ret_str?=?pUnicode;??
  • ????free(pUnicode);??
  • ????return?ret_str;??
  • }??
  • string?UnicodeToAscii(const?wstring&?wstr)?{??
  • ????//?預算-緩沖區中多字節的長度????
  • ????int?ansiiLen?=?WideCharToMultiByte(CP_ACP,?0,?wstr.c_str(),?-1,?nullptr,?0,?nullptr,?nullptr);??
  • ????//?給指向緩沖區的指針變量分配內存????
  • ????char?*pAssii?=?(char*)malloc(sizeof(char)*ansiiLen);??
  • ????//?開始向緩沖區轉換字節????
  • ????WideCharToMultiByte(CP_ACP,?0,?wstr.c_str(),?-1,?pAssii,?ansiiLen,?nullptr,?nullptr);??
  • ????string?ret_str?=?pAssii;??
  • ????free(pAssii);??
  • ????return?ret_str;??
  • }??
  • wstring?Utf8ToUnicode(const?string&?str)?{??
  • ????//?預算-緩沖區中寬字節的長度????
  • ????int?unicodeLen?=?MultiByteToWideChar(CP_UTF8,?0,?str.c_str(),?-1,?nullptr,?0);??
  • ????//?給指向緩沖區的指針變量分配內存????
  • ????wchar_t?*pUnicode?=?(wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);??
  • ????//?開始向緩沖區轉換字節????
  • ????MultiByteToWideChar(CP_UTF8,?0,?str.c_str(),?-1,?pUnicode,?unicodeLen);??
  • ????wstring?ret_str?=?pUnicode;??
  • ????free(pUnicode);??
  • ????return?ret_str;??
  • }??
  • string?UnicodeToUtf8(const?wstring&?wstr)?{??
  • ????//?預算-緩沖區中多字節的長度????
  • ????int?ansiiLen?=?WideCharToMultiByte(CP_UTF8,?0,?wstr.c_str(),?-1,?nullptr,?0,?nullptr,?nullptr);??
  • ????//?給指向緩沖區的指針變量分配內存????
  • ????char?*pAssii?=?(char*)malloc(sizeof(char)*ansiiLen);??
  • ????//?開始向緩沖區轉換字節????
  • ????WideCharToMultiByte(CP_UTF8,?0,?wstr.c_str(),?-1,?pAssii,?ansiiLen,?nullptr,?nullptr);??
  • ????string?ret_str?=?pAssii;??
  • ????free(pAssii);??
  • ????return?ret_str;??
  • }??
  • string?AsciiToUtf8(const?string&?str)?{??
  • ????return?UnicodeToUtf8(AsciiToUnicode(str));??
  • }??
  • string?Utf8ToAscii(const?string&?str)?{??
  • ????return?UnicodeToAscii(Utf8ToUnicode(str));??
  • }??
  • //?ASCII與Unicode互轉??
  • CStringW????AsciiToUnicode_CSTR(const?CStringA&?str)?{??
  • ????return?AsciiToUnicode(LPCSTR(str)).c_str();??
  • }??
  • CStringA????UnicodeToAscii_CSTR(const?CStringW&?wstr)?{??
  • ????return?UnicodeToAscii(LPCWSTR(wstr)).c_str();??
  • }??
  • //?UTF8與Unicode互轉??
  • CStringW????Utf8ToUnicode_CSTR(const?CStringA&?str)?{??
  • ????return?Utf8ToUnicode(LPCSTR(str)).c_str();??
  • }??
  • CStringA????UnicodeToUtf8_CSTR(const?CStringW&?wstr)?{??
  • ????return?UnicodeToUtf8(LPCWSTR(wstr)).c_str();??
  • }??
  • //?ASCII與UTF8互轉??
  • CStringA????AsciiToUtf8_CSTR(const?CStringA&?str)?{??
  • ????return?UnicodeToUtf8_CSTR(AsciiToUnicode_CSTR(str));??
  • }??
  • CStringA????Utf8ToAscii_CSTR(const?CStringA&?str)?{??
  • ????return?UnicodeToAscii_CSTR(Utf8ToUnicode_CSTR(str));??
  • }??
  • //?string?與?Int?互轉??
  • int?StringToInt(const?string&?str)?{??
  • ????return?atoi(str.c_str());??
  • }??
  • string?IntToString(int?i)?{??
  • ????char?ch[1024];??
  • ????memset(ch,?0,?1024);??
  • ????sprintf_s(ch,?sizeof(ch),?"%d",?i);??
  • ????return?ch;??
  • }??
  • string?IntToString(char?i)?{??
  • ????char?ch[1024];??
  • ????memset(ch,?0,?1024);??
  • ????sprintf_s(ch,?sizeof(ch),?"%c",?i);??
  • ????return?ch;??
  • }??
  • string?IntToString(double?i)?{??
  • ????char?ch[1024];??
  • ????memset(ch,?0,?1024);??
  • ????sprintf_s(ch,?sizeof(ch),?"%f",?i);??
  • ????return?ch;??
  • }??


  • UTF8和UnICODE轉換

    [cpp]?view plaincopy print?
  • CString?CNoviewPDlg::AsciiToUnicode(CStringA?szStringA)??
  • {??
  • ????string?str?=?szStringA.GetBuffer(0);??
  • ????//?預算-緩沖區中寬字節的長度??????
  • ????int?unicodeLen?=?MultiByteToWideChar(CP_UTF8,?0,?str.c_str(),?-1,?nullptr,?0);??
  • ????//?給指向緩沖區的指針變量分配內存??????
  • ????wchar_t?*pUnicode?=?(wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);??
  • ????//?開始向緩沖區轉換字節??????
  • ????MultiByteToWideChar(CP_UTF8,?0,?str.c_str(),?-1,?pUnicode,?unicodeLen);??
  • ????wstring?ret_str?=?pUnicode;??
  • ????free(pUnicode);??
  • ????return?CString(ret_str.c_str());??
  • }??
  • CStringA?CNoviewPDlg::UnicodeToAscii(CString?szString)??
  • {??
  • ????wstring?wstr?=?szString.GetBuffer(0);??
  • ????//?預算-緩沖區中多字節的長度??????
  • ????int?ansiiLen?=?WideCharToMultiByte(CP_UTF8,?0,?wstr.c_str(),?-1,?nullptr,?0,?nullptr,?nullptr);??
  • ????//?給指向緩沖區的指針變量分配內存??????
  • ????char?*pAssii?=?(char*)malloc(sizeof(char)*ansiiLen);??
  • ????//?開始向緩沖區轉換字節??????
  • ????WideCharToMultiByte(CP_UTF8,?0,?wstr.c_str(),?-1,?pAssii,?ansiiLen,?nullptr,?nullptr);??
  • ????string?ret_str?=?pAssii;??
  • ????free(pAssii);??
  • ????return?CStringA(ret_str.c_str());??
  • } ?
  • 總結

    以上是生活随笔為你收集整理的C++中ASCII、unicode与Utf8之间的相互转化的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。