C++中ASCII、unicode与Utf8之间的相互转化
2016-02-29 11:31
363 查看
头文件:UTN.h
cpp文件:UTN.cpp
#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
#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; }
相关文章推荐
- C++基础知识易错点总结(1)
- C++ 关键字 explicit, export, mutable
- C 语言移位操作陷阱
- C++ template 分离式编译
- C语言中的基本文件操作:fopen , fread , fseek , fclose.
- C++中直接初始化与复制初始化
- C++的socket编程学习
- C语言图形处理
- VC++基于微软语音引擎开发语音识别总结
- c++抽象类和纯虚函数 知识整理
- C/C++ 之 left operand must be l-value 错误提示总结
- C++先序遍历输入树的创建
- 【c/c++】C++代码一次读取文本文件全部内容到string对象
- C++:关联容器(pair、map、set)
- wav文件格式分析(代码 C++ )
- C语言中fflush函数的使用方法
- 《C++ Primer》之重载操作符与转换(中)
- 单链表的逆置-C++实现
- 算法代码实现之Union-Find,C++实现,quick-find、quick-union、加权quick-union(附带路径压缩优化)
- vs2010 C++创建和使用动态链接库(dll)