【千律】C++基础:宽窄字节字符串的相互转换与控制台输出

2023-11-06

 方案1:

#include <string>
#include <tchar.h>
#include <iostream>
#include <windows.h>
using namespace std;

// 窄字节转换为宽字节
wchar_t* str_a2w(char* str_a)
{
	// 计算字节所需长度
	int str_a_len = MultiByteToWideChar(CP_ACP, 0, str_a, -1, NULL, 0);

	// 判断字符长度读取是否成功
	if (str_a_len <= 0) return NULL;

	// 动态申请内存并置0
	wchar_t* str_w = new wchar_t[str_a_len];
	wmemset(str_w, 0, str_a_len);

	// 窄字节到宽字节的转换
	MultiByteToWideChar(CP_ACP, 0, str_a, -1, str_w, str_a_len);

	// 返回结果
	return str_w;
}

// 宽字节转换为窄字节
char* str_w2a(wchar_t* str_w)
{
	// 计算字节所需长度
	int str_w_len = WideCharToMultiByte(CP_ACP, 0, str_w, -1, NULL, 0, NULL, NULL);

	// 判断字符长度读取是否成功
	if (str_w_len <= 0) return NULL;

	// 动态申请内存并置0
	char* str_a = new char[str_w_len];
	memset(str_a, 0, str_w_len);

	// 宽字节到窄字节的转换
	WideCharToMultiByte(CP_ACP, 0, str_w, -1, str_a, str_w_len, NULL, NULL);

	// 返回结果
	return str_a;
}

int main()
{
	// 初始化
	wchar_t* point_wstr = L"梦想中国2022";

	// 宽字节转换为窄字节
	char* point_w2a = str_w2a(point_wstr);

	// 窄字节转换为宽字节
	wchar_t* point_a2w = str_a2w(point_w2a);

	// 解决控制台不输出中文问题
	wcout.imbue(std::locale("chs"));

	// 输出结果
	cout << "转换后结果 = " << point_w2a << endl;
	wcout << L"转换后结果 = " << point_a2w << endl;

	// 删除申请内存
	delete[] point_w2a;
	delete[] point_a2w;

	return 0;
}

 

方案2: 

#include <tchar.h>
#include <iostream>
#include "atlbase.h"
#include "atlstr.h"

using namespace std;

int main()
{
	// 初始化
	wchar_t* point_wstr = L"梦想中国2022";

	// 宽字节转换为窄字节
	CW2A point_w2a(point_wstr);
	char* str_a = (char*)point_w2a;

	// 窄字节转换为宽字节
	CA2W point_a2w(point_w2a);
	wchar_t* str_w = (wchar_t*)point_a2w;

	// 解决控制台不输出中文问题
	wcout.imbue(std::locale("chs"));

	// 输出结果
	cout << "转换后结果 = " << str_a << endl;
	wcout << L"转换后结果 = " << str_w << endl;

	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【千律】C++基础:宽窄字节字符串的相互转换与控制台输出 的相关文章

随机推荐

  • scroll-view 安卓无法下拉

    当前 Bug 的表现 在安卓上对 scroll view 无法下拉而且无法触发下拉事件 预期表现 与ios表现一致 可以使用scroll view 进行下拉并且触发下拉事件 原因 在ios上是可以下拉出来一部分距离从而触发下拉事件 但是在安
  • 攻防世界-WEB:command_execution

    题目https adworld xctf org cn challenges problem set index id 25 题目描述 小宁写了个ping功能 但没有写waf X老师告诉她这是非常危险的 你知道为什么吗 根据题目描述 我们可
  • 查找问题的利器 - Git Blame

    分享一下我老师大神的人工智能教程 零基础 通俗易懂 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 造福人民 实现我们中华民族伟大复兴 原文 http gitbook liuhui998 c
  • 算法-倒置排序

    include
  • k8s学习-思维导图与学习笔记

    目录 前言 k8s思维导图 推荐 书籍 网站 课程 了解与安装 基础 资源调度 服务发布 配置管理 进阶 持久化存储 高级调度 高级 RBAC NetworkPolicy CKA 安全 CKS 前言 博主准备学习k8s 考个CKA和CKS证
  • 利用栈来破解迷宫问题

    利用栈来破解迷宫问题 对于迷宫类问题的破解 需要利用栈的思想 1 构思 假设 当前位置 指的是在搜索过程中某一时刻所在途中某个方块的位置 路径是最优走法 则求迷宫当中一条路径的思想便是 若当前位置可以通过 那么存放在 路径 中 可以通过的位
  • MySQL基础篇-第02章_MySQL环境搭建

    第02章 MySQL环境搭建 讲师 尚硅谷 宋红康 江湖人称 康师傅 官网 http www atguigu com 1 MySQL的卸载 步骤1 停止MySQL服务 在卸载之前 先停止MySQL8 0的服务 按键盘上的 Ctrl Alt
  • silverlight与Flash的技术比较[silverlight vs Flash] (转载)

    转载自 http bbs blueidea com thread 2773212 1 1 html 在以前的一篇 文章中我已经说明了Adobe和Microsoft在presentation layer的竞争关系 根据一些资料总结的功能 我针
  • 前端客户端日志上报功能开发

    客户端日志上报功能 描述 最近项目上需要做一个客户端重要报错信息上传保存至服务器 后台集中分析 需要前端支持 讲一下我这边处理的逻辑 仅供参考 1 项目初始化时定义一个console lr console lr function 2 组装要
  • 《FITNETS: HINTS FOR THIN DEEP NETS》论文整理

    目录 零 前言 一 Fitnet的目的及适用范围 1 目的 2 适用范围 3 背景及创新点 二 Hint Based Training思想 1 hint层与guided层 2 核心思想 三 Fitnet训练过程及效果 1 FItnet训练过
  • 边缘匹配matlab,几种简单常用的镜头边缘检测算法(matlab实现)

    在做镜头检测之前 为方便起见 我们先将一个视频短片提取出一定数量的图像序列 提取图片序列 video mmreader test avi Tag Reader NOF video NumberOfFrames Img diff zeros
  • 汇编程序设计与计算机体系结构软件工程师教程笔记:处理器、寄存器简介

    汇编程序设计与计算机体系结构 软件工程师教程 这本书是由Brain R Hall和Kevin J Slonka著 由爱飞翔译 中文版是2019年出版的 个人感觉这本书真不错 书中介绍了三种汇编器GAS NASM MASM异同 全部示例代码都
  • js怎么判断两数组之间有没有交集

    var arr1 1 2 3 4 5 6 7 8 1 var arr2 6 7 8 9 10 11 1 arr2 filter i gt return arr1 includes i 有两个数组 数组1和数组2 想实现的需求 判断数组2里有
  • 数据包在网络中的传输过程详解

    我们当今使用电子设备都离不开网络 通过网络我们可以聊天 玩游戏 看电影都操作 网络的本质就是交换数据 本文我们就来看下数据是如何在网络中传输的 计算机网络模型 现在有两种计算机网络模型 分别为OSI七层模型和TCP IP四层模型 OSI将计
  • MySQL中的触发器

    MySQL中的触发器 在数据库应用中 我们经常需要对数据进行某些操作 并在操作完成后进行相应的处理 这时候 可以使用触发器来实现这些功能 MySQL提供了强大的触发器功能 本文将带您深入了解MySQL中的触发器 什么是触发器 触发器是一种特
  • HierarchicalDataTemplate

    针对具有分层数据结构的控件设计的 比如说TreeView 相当于可以每一个层级上做DataTemplate XmlDataProvider 数据源 写在Resources下
  • Redis——缓存击穿、穿透、雪崩

    Redis的缓存击穿 穿透 雪崩 这几个概念是设计大流量接口时所需要考虑的问题 也是面试常问的Redis相关的基础知识 本篇捋一下这几个概念 做一个小结 大家都知道 计算机的瓶颈之一就是IO 为了解决内存与磁盘速度不匹配的问题 产生了缓存
  • 操作系统作业 - 内存管理 - 请求分页分配方式模拟

    内存管理 请求分页分配方式 设计方案报告 文末有源码 文章目录 内存管理 请求分页分配方式 设计方案报告 1 项目需求 1 1 基本任务 1 2 功能描述 1 3 项目目的 2 开发环境 3 项目结构 4 操作说明 5 系统分析 5 1 置
  • 洛谷题单 算法1-7 搜索

    USACO08FEB Meteor Shower S 题目描述 Bessie hears that an extraordinary meteor shower is coming reports say that these meteor
  • 【千律】C++基础:宽窄字节字符串的相互转换与控制台输出

    方案1 include