【iconv】Linux c++ 中文字符串转十六进制 GBK 编码/内码

文章目录

    • 问题描述
    • c++ 代码
    • CMakeLists.txt
    • 参考链接

问题描述

Linux 系统默认使用的是 UTF-8 编码,并且 c++ 中没有标准库可以直接将中文字符转为 GBK 编码/内码。因此需要借助 iconv 库来实现。

在实现代码之前,可以在一下在线工具网站进行中文字符到各个编码的双向转换:
汉字字符集编码查询:https://www.qqxiuzi.cn/bianma/zifuji.php
在这里插入图片描述

c++ 代码

#include <iconv.h>#include <iomanip>
#include <iostream>
#include <sstream>
#include <string>using namespace std;// 将字符串转换为十六进制 GBK 编码, 例如 C4 E3 格式
string StringToGBK(const string &str) {// 初始化 iconv 转换器iconv_t cd = iconv_open("GBK", "UTF-8");if (cd == (iconv_t)-1) {cerr << "无法打开iconv转换器" << endl;return "";}// 输入字符串和输出字符串const char *inbuf       = str.c_str();size_t      inbytesleft = str.size();string      outstr;outstr.resize(str.size() * 2);  // 预留足够的空间来存储转换后的结果char  *outbuf       = &outstr[0];size_t outbytesleft = outstr.size();// 进行转换size_t result = iconv(cd, (char **)&inbuf, &inbytesleft, &outbuf, &outbytesleft);if (result == (size_t)-1) {cerr << "转换失败: " << str << endl;iconv_close(cd);return "";}// 关闭 iconv 转换器iconv_close(cd);// 调整输出字符串的大小outstr.resize(outstr.size() - outbytesleft);// 转为十六进制 GBK 编码, 例如 C4 E3 格式stringstream res_ss;for (const char &character : outstr) {res_ss << hex << setw(2) << setfill('0') << uppercase << static_cast<int>(static_cast<unsigned char>(character)) << " ";}return res_ss.str();
}int main() {// 编码string str = "你好";cout << StringToGBK(str) << endl;// C4 E3 BA C3return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)project(encode_test)# 查找 iconv 库的位置并添加到链接目录中
find_package(Iconv REQUIRED)
include_directories(include    ${ICONV_INCLUDE_DIRS}
)file(GLOB_RECURSE SRC_FILES src/*)add_executable(encode_test${SRC_FILES}
)
target_link_libraries(encode_test${ICONV_LIBRARIES}
)

参考链接

c++最全进制转化(含算法和函数分析):https://blog.csdn.net/qq_43621422/article/details/100586558

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/314424.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac上安装Tomcat

1. 简介 Tomcat 是一个开源的 Java 服务器&#xff0c;它实现了 Java Servlet、JavaServer Pages&#xff08;JSP&#xff09;和Java WebSocket 技术。Tomcat 是 Apache 软件基金会的一个项目&#xff0c;是一个轻量级、高性能的 Web 容器。作为一个 Web 服务器&#xff0c;To…

前端工程化Vue使用Node.js设置国内高速npm镜像源(踩坑记录版)

前端工程化Vue使用Node.js设置国内高速npm镜像源&#xff08;踩坑记录版&#xff09; 此篇仅为踩坑记录&#xff0c;并未成功更换高速镜像源&#xff0c;实际解决方法见文末跳转链接。 1.自身源镜像 自身镜像源创建Vue项目下载速度感人 2.更改镜像源 2.1 通过命令行配置 前提…

常见的排序算法

前言 算法对于我们普通的工程师来说可算得上陌生又熟悉&#xff0c;因为在平时的业务代码中可能见到他的身影比较少&#xff0c;但在底层的代码中我们可能会经常发现排序算法的影子&#xff0c;如数据库索引&#xff0c;操作系统的进程调度。因此&#xff0c;掌握这种算法中的…

打造智能语音机器人-用语音控制机器人

人工智能现已成为国家发展重大战略&#xff0c;智能语音技术作为人工智能产业链上的关键一环&#xff0c;AI应用成熟的技术之一&#xff0c;人工智能的发展也进入了一个崭新的阶段。那么打造智能语音机器人怎样实现用语音控制机器人呢&#xff1f;和小编一起来看看。 选择合适的…

Xcode for Mac:强大易用的集成开发环境

Xcode for Mac是一款专为苹果开发者打造的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它集成了代码编辑器、编译器、调试器等一系列开发工具&#xff0c;让开发者能够在同一界面内完成应用的开发、测试和调试工作。 Xcode for Mac v15.2正式版下载 Xcode支持多种编程…

如何将web content项目导入idea并部署到tomcat

将Web Content项目导入IntelliJ IDEA并部署到Tomcat主要涉及以下几个步骤&#xff1a; 1. 导入Web Content项目 打开IntelliJ IDEA。选择“File” -> “New” -> “Project from Existing Sources…”。浏览到你的Web Content项目的文件夹&#xff0c;并选择它。Intell…

1.C++入门(上)

目录 1.C关键字 2.命名空间 作用域方面的优化 a.命名空间定义 b.命名空间使用 3.C 输入&输出 1.C关键字 C有63个关键字&#xff0c;C语言有32个关键字&#xff0c;存在重叠如荧光笔标出 2.命名空间 作用域方面的优化 如果变量&#xff0c;函数和类的名称都存在于全…

Hive服务详解

Hive服务 HiveServer2、Hive Metastore 服务服务共同构成了 Hive 生态系统中的核心功能&#xff0c;分别负责管理元数据和提供数据查询服务&#xff0c;为用户提供了一个方便、高效的方式来访问和操作存储在 Hive 中的数据。 1. Hive 查询服务&#xff08;HiveServer2&#xf…

STM32自己从零开始实操01:原理图

在听完老师关于 STM32 物联网项目的所有硬件课程之后&#xff0c;就是感觉自己云里雾里&#xff0c;明明课程都认真听完了&#xff0c;笔记也认真记录&#xff0c;但是就是感觉学到的知识还不是自己。 遂决定站在老师的肩膀上自己开始设计项目&#xff0c;将知识变成自己的&am…

沉浸式推理乐趣:体验线上剧本杀小程序的魅力

在这个信息爆炸的时代&#xff0c;人们的娱乐方式也在不断地推陈出新。其中&#xff0c;线上剧本杀小程序以其独特的沉浸式推理乐趣&#xff0c;成为了许多人的新宠。它不仅让我们在闲暇之余享受到了推理的快乐&#xff0c;更让我们在虚拟的世界里感受到了人性的复杂与多彩。 线…

【Linux网络编程】数据链路层

数据链路层 1.以太网帧格式2.重谈局域网转发的原理(基于协议)3.认识MTU3.1MTU对IP协议的影响3.2MTU对UDP协议的影响3.3MTU对于TCP协议的影响 4.ARP协议 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励…

Windows系统下将MySQL数据库表内的数据全量导入Elasticsearch

目录 下载安装Logstash 配置Logstash配置文件 运行配置文件 查看导入结果 使用Logstash将sql数据导入Elasticsearch 下载安装Logstash 官网地址 选择Windows系统&#xff0c;需下载与安装的Elasticsearch相同版本的&#xff0c;下载完成后解压安装包。 配置Logstash配…

浏览器的同源策略与解决跨域

同源策略&#xff08;协议、域名、端口&#xff09; 同源策略&#xff08;Same-Origin Policy&#xff09;是一个在浏览器安全模型中被实施的重要安全机制。它是基于域名、协议和端口号的限制&#xff0c;用于防止不同源的网页间的恶意行为和信息泄露。 根据同源策略&#xf…

C语言笔试题之重排链表

重排链表 实例要求 1、给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln2、请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …3、不能只是单纯的改变节点内部的值&#xff0c;而是…

“AI技能,新的职场通行证?揭秘阿里最新职业趋势报告“

随着“五一”劳动节的临近&#xff0c;阿里巴巴发布了一份引人注目的报告——《“AI”职业趋势报告》。这份报告不仅揭示了人工智能&#xff08;AI&#xff09;在各行各业中的关键作用&#xff0c;也预示了一个全新的工作时代正在加速到来。 报告中明确指出&#xff0c;AI的应用…

mysql8.0免安装版windows

1.下载 MySQL下载链接 2.解压与新建my.ini文件 解压的路径最好不要有中文路径在\mysql-8.0.36-winx64文件夹下新建my.ini文件&#xff0c;不建data文件夹(会自动生成) [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录(尽量用双斜杠\\,单斜杠\可能会报错) basedirD:\…

谈谈前端CSS盒模型

前言&#xff1a; 什么是CSS盒模型&#xff1f;盒模型的构造&#xff1f; 在前端开发中&#xff0c;CSS 盒模型是一种非常基础且核心的概念&#xff0c;它描述了文档中的每个元素被框架处理的方式。 ---- 打开浏览器开发者工具&#xff0c;查看Elements右侧下的Styles底部。 …

Docker从无到有

主要为windows下docker的安装与使用~ 初始Docker Docker理解 对于docker的加简介&#xff0c;我们可以官网获取它的概念&#xff0c;接下来就从什么是docker、为什么要使用docker以及它的作用来进行一个快速入门 前提&#xff1a;项目在发布时&#xff0c;不仅需要其jar包同…

2024年五一假期出行预测报告

来源&#xff1a;高德地图 2024年五一假期期间&#xff0c;预计全国高速出程整体交通压力高于返程&#xff0c;预计5月1日&#xff08;假期首日&#xff09;9时-13时是出程拥堵高峰时段&#xff0c;峰值出现在10时-11时&#xff1b; 全国高速返程高峰或将较为分散&#xff0c…

【持续更新】java刷题常用数据结构、方法和思路

动态数组——ArrayList ArrayList类是一个可以动态修改的数组&#xff0c;与普通数组的区别就是它是没有固定大小的限制&#xff0c;我们可以添加或删除元素&#xff1b;ArrayList 继承了 AbstractList &#xff0c;并实现了 List 接口。 实例化方法&#xff1a;ArrayList<…