头文件:UTN.h

[cpp] view plaincopy print?
  1. #pragma once
  2. #include "stdafx.h"
  3. #include "windows.h"
  4. #include <iostream>
  5. #include <string>
  6. using namespace std;
  7. //**************string******************//
  8. // ASCII与Unicode互转
  9. wstring AsciiToUnicode(const string& str);
  10. string  UnicodeToAscii(const wstring& wstr);
  11. // UTF8与Unicode互转
  12. wstring Utf8ToUnicode(const string& str);
  13. string  UnicodeToUtf8(const wstring& wstr);
  14. // ASCII与UTF8互转
  15. string  AsciiToUtf8(const string& str);
  16. string  Utf8ToAscii(const string& str);
  17. //**************CString******************//
  18. // ASCII与Unicode互转
  19. CStringW    AsciiToUnicode_CSTR(const CStringA& str);
  20. CStringA    UnicodeToAscii_CSTR(const CStringW& wstr);
  21. // UTF8与Unicode互转
  22. CStringW    Utf8ToUnicode_CSTR(const CStringA& str);
  23. CStringA    UnicodeToUtf8_CSTR(const CStringW& wstr);
  24. // ASCII与UTF8互转
  25. CStringA    AsciiToUtf8_CSTR(const CStringA& str);
  26. CStringA    Utf8ToAscii_CSTR(const CStringA& str);
  27. /************string-int***************/
  28. // string 转 Int
  29. int StringToInt(const string& str);
  30. string IntToString(int i);
  31. string IntToString(char i);
  32. string IntToString(double i);

cpp文件:UTN.cpp

[cpp] view plaincopy print?
  1. #pragma once
  2. #include "stdafx.h"
  3. #include "UTN.h"
  4. wstring AsciiToUnicode(const string& str) {
  5. // 预算-缓冲区中宽字节的长度
  6. int unicodeLen = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, nullptr, 0);
  7. // 给指向缓冲区的指针变量分配内存
  8. wchar_t *pUnicode = (wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);
  9. // 开始向缓冲区转换字节
  10. MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, pUnicode, unicodeLen);
  11. wstring ret_str = pUnicode;
  12. free(pUnicode);
  13. return ret_str;
  14. }
  15. string UnicodeToAscii(const wstring& wstr) {
  16. // 预算-缓冲区中多字节的长度
  17. int ansiiLen = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, nullptr, 0, nullptr, nullptr);
  18. // 给指向缓冲区的指针变量分配内存
  19. char *pAssii = (char*)malloc(sizeof(char)*ansiiLen);
  20. // 开始向缓冲区转换字节
  21. WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, pAssii, ansiiLen, nullptr, nullptr);
  22. string ret_str = pAssii;
  23. free(pAssii);
  24. return ret_str;
  25. }
  26. wstring Utf8ToUnicode(const string& str) {
  27. // 预算-缓冲区中宽字节的长度
  28. int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, nullptr, 0);
  29. // 给指向缓冲区的指针变量分配内存
  30. wchar_t *pUnicode = (wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);
  31. // 开始向缓冲区转换字节
  32. MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, pUnicode, unicodeLen);
  33. wstring ret_str = pUnicode;
  34. free(pUnicode);
  35. return ret_str;
  36. }
  37. string UnicodeToUtf8(const wstring& wstr) {
  38. // 预算-缓冲区中多字节的长度
  39. int ansiiLen = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, nullptr, 0, nullptr, nullptr);
  40. // 给指向缓冲区的指针变量分配内存
  41. char *pAssii = (char*)malloc(sizeof(char)*ansiiLen);
  42. // 开始向缓冲区转换字节
  43. WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, pAssii, ansiiLen, nullptr, nullptr);
  44. string ret_str = pAssii;
  45. free(pAssii);
  46. return ret_str;
  47. }
  48. string AsciiToUtf8(const string& str) {
  49. return UnicodeToUtf8(AsciiToUnicode(str));
  50. }
  51. string Utf8ToAscii(const string& str) {
  52. return UnicodeToAscii(Utf8ToUnicode(str));
  53. }
  54. // ASCII与Unicode互转
  55. CStringW    AsciiToUnicode_CSTR(const CStringA& str) {
  56. return AsciiToUnicode(LPCSTR(str)).c_str();
  57. }
  58. CStringA    UnicodeToAscii_CSTR(const CStringW& wstr) {
  59. return UnicodeToAscii(LPCWSTR(wstr)).c_str();
  60. }
  61. // UTF8与Unicode互转
  62. CStringW    Utf8ToUnicode_CSTR(const CStringA& str) {
  63. return Utf8ToUnicode(LPCSTR(str)).c_str();
  64. }
  65. CStringA    UnicodeToUtf8_CSTR(const CStringW& wstr) {
  66. return UnicodeToUtf8(LPCWSTR(wstr)).c_str();
  67. }
  68. // ASCII与UTF8互转
  69. CStringA    AsciiToUtf8_CSTR(const CStringA& str) {
  70. return UnicodeToUtf8_CSTR(AsciiToUnicode_CSTR(str));
  71. }
  72. CStringA    Utf8ToAscii_CSTR(const CStringA& str) {
  73. return UnicodeToAscii_CSTR(Utf8ToUnicode_CSTR(str));
  74. }
  75. // string 与 Int 互转
  76. int StringToInt(const string& str) {
  77. return atoi(str.c_str());
  78. }
  79. string IntToString(int i) {
  80. char ch[1024];
  81. memset(ch, 0, 1024);
  82. sprintf_s(ch, sizeof(ch), "%d", i);
  83. return ch;
  84. }
  85. string IntToString(char i) {
  86. char ch[1024];
  87. memset(ch, 0, 1024);
  88. sprintf_s(ch, sizeof(ch), "%c", i);
  89. return ch;
  90. }
  91. string IntToString(double i) {
  92. char ch[1024];
  93. memset(ch, 0, 1024);
  94. sprintf_s(ch, sizeof(ch), "%f", i);
  95. return ch;
  96. }

UTF8和UnICODE转换

[cpp] view plaincopy print?
  1. CString CNoviewPDlg::AsciiToUnicode(CStringA szStringA)
  2. {
  3. string str = szStringA.GetBuffer(0);
  4. // 预算-缓冲区中宽字节的长度
  5. int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, nullptr, 0);
  6. // 给指向缓冲区的指针变量分配内存
  7. wchar_t *pUnicode = (wchar_t*)malloc(sizeof(wchar_t)*unicodeLen);
  8. // 开始向缓冲区转换字节
  9. MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, pUnicode, unicodeLen);
  10. wstring ret_str = pUnicode;
  11. free(pUnicode);
  12. return CString(ret_str.c_str());
  13. }
  14. CStringA CNoviewPDlg::UnicodeToAscii(CString szString)
  15. {
  16. wstring wstr = szString.GetBuffer(0);
  17. // 预算-缓冲区中多字节的长度
  18. int ansiiLen = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, nullptr, 0, nullptr, nullptr);
  19. // 给指向缓冲区的指针变量分配内存
  20. char *pAssii = (char*)malloc(sizeof(char)*ansiiLen);
  21. // 开始向缓冲区转换字节
  22. WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, pAssii, ansiiLen, nullptr, nullptr);
  23. string ret_str = pAssii;
  24. free(pAssii);
  25. return CStringA(ret_str.c_str());
  26. }

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

  1. linux ascii转换 utf8,C++中ASCII、unicode与Utf8之间的相互转化

    一.windows下转换方法: // 当type为CP_ACP时,GBK转化为UNICODE:当type为CP_UTF8时,UTF8转化为UNICODE wchar_t* trans(const ch ...

  2. 彻底搞清楚ASCII,Unicode和UTF-8之间的关系

    转载自:https://blog.csdn.net/Deft_MKJing/article/details/79460485 前言 平时喜欢写东西,看博客,一直对编码有些懵,今天下午也不知道看到了什么 ...

  3. [字符集]Unicode和UTF-8之间的转换详解

        最近在用VC++开发一个小工具,平时用惯了.NET,用起VC++最郁闷的就是字符串处理.当然最最让人难于琢磨的就是字符集,编码之间的转换.通过这几天的研究,终于明白了Unicode和UTF-8 ...

  4. 字符集和编码规范:ASCII,Unicode和UTF-8, latin1,BIG5,GBK

    字符集和编码方式:ASCII,Unicode和UTF-8, latin1,BIG5,GBK 参考: 字符集 字符集编码详解 一. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制 ...

  5. Unicode和UTF-8之间的转换详解

    Unicode是一个字符集,而UTF-8是 Unicode的其中一种,Unicode是定长的都为双字节,而UTF-8是可变的,对于汉字来说Unicode占有的字节比UTF-8占用的字节少1 个字节.U ...

  6. Unicode 和 UTF-8 之间的关系

    一.ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是说,一个 ...

  7. 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)

    参考博客: Unicode与UTF-8互转(C语言实现):http://blog.csdn.net/tge7618291/article/details/7599902 汉字 Unicode 编码范围 ...

  8. 字符编码:Unicode和UTF-8之间的关系

    Unicode和UTF-8之间的关系 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256 ...

  9. 在Linux C编程中使用Unicode和UTF-8

    在Linux C编程中使用Unicode和UTF-8 目前各种Linux发行版都支持UTF-8编码,当前系统的语言和字符编码设置保存在一些环境变量中,可以通过locale命令查看: $ locale ...

最新文章

  1. Hdu_2063 过山车 -最大匹配(邻接表版)
  2. 阿里发布图计算平台GraphScope,即将向全社会开源
  3. 精选四款命令行「神器」:美、快、爽!
  4. 算法 - php - 二叉树遍历
  5. boost::hana::ap用法的测试程序
  6. TIBCO产品的微服务和DevOps
  7. 编转码、CDN和AI是如何撑起短视频数百亿市场规模的
  8. mysql sql注入工具_基础篇——SQL注入(工具注入)
  9. jpadao层继承什么_实木复合地板特点是什么
  10. 基于 CNN 和迁移学习的农作物病害识别方法研究
  11. 【多任务】如何利用多任务学习提升模型性能?
  12. 一个好用的不基于时间的同步文件的软件 —— Allway sync 文件同步
  13. vs2010专业版下载链接
  14. opencv-车牌识别
  15. 概率论基础(一):条件均值与全期望公式
  16. java sort 降序_详解Java sort()数组排序(升序和降序)
  17. 全面解读java虚拟机(面试考点大全)d
  18. 【年度总结 | 2022】想干什么就去干吧,少年
  19. UE4 用C++构建自定义材质 完成视频抠像
  20. 内核aio_AIO 简介

热门文章

  1. 数据库-优化-数据库结构的优化-拆分优化
  2. StringBuilder的toString方法
  3. Redisson框架框架集成
  4. 计算机设备抽象,计算机系统原理(三) 金字塔形的存储设备、操作系统的抽象概念...
  5. kafka技术内幕(二)
  6. python之路day9_亮仔的Python之路Day9——Python知识体系重组
  7. 互联网协议套件(TCP/IP)及七层OSI模型
  8. Linux下静态库的创立与使用
  9. parseInt和parseFloat(转换成数字,提取成数字)?
  10. ICC_lab总结——ICC_lab6:版图完成