C++数据格式化6 - uint转换成二六进制字符串

2024-06-21 03:12

本文主要是介绍C++数据格式化6 - uint转换成二六进制字符串,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 1. 关键词
  • 2. strfmt.h
  • 3. strfmt.cpp
  • 4. 测试代码
  • 5. 运行结果
  • 6. 源码地址

1. 关键词

C++ 数据格式化 字符串处理 std::string int bin 跨平台

2. strfmt.h

#pragma once#include <string>
#include <cstdint>
#include <sstream>
#include <iomanip>namespace cutl
{/*** @brief Format uint8_t value to a binary string.** @param value the value to be formatted.* @param separator the separator between each pair of binary characters, default is comma.* @return std::string the formatted string.*/std::string to_bin(uint8_t value, char separator = ',');/*** @brief Format uint16_t value to a binary string.** @param value the value to be formatted.* @param separator the separator between each pair of binary characters, default is space.* @return std::string the formatted string.*/std::string to_bin(uint16_t value, char separator = ' ');/*** @brief Format uint32_t value to a binary string.** @param value the value to be formatted.* @param separator the separator between each pair of binary characters, default is space.* @return std::string the formatted string.*/std::string to_bin(uint32_t value, char separator = ' ');/*** @brief Format uint64_t value to a binary string.** @param value the value to be formatted.* @param separator the separator between each pair of binary characters, default is space.* @return std::string the formatted string.*/std::string to_bin(uint64_t value, char separator = ' ');
} // namespace cutl

3. strfmt.cpp

#include <sstream>
#include <iomanip>
#include <bitset>
#include "strfmt.h"namespace cutl
{std::string to_bin(uint8_t value, char separator){std::string text;std::bitset<4> v1((value >> 4) & 0xF);std::bitset<4> v2(value & 0xF);text += v1.to_string();text += separator;text += v2.to_string();return text;}std::string to_bin(uint16_t value, char separator){std::string text;text += to_bin((uint8_t)((value >> 8) & 0xFF)) + separator;text += to_bin((uint8_t)(value & 0xFF));return text;}std::string to_bin(uint32_t value, char separator){std::string text;text += to_bin((uint8_t)((value >> 24) & 0xFF)) + separator;text += to_bin((uint8_t)((value >> 16) & 0xFF)) + separator;text += to_bin((uint8_t)((value >> 8) & 0xFF)) + separator;text += to_bin((uint8_t)(value & 0xFF));return text;}std::string to_bin(uint64_t value, char separator){std::string text;text += to_bin((uint8_t)((value >> 56) & 0xFF)) + separator;text += to_bin((uint8_t)((value >> 48) & 0xFF)) + separator;text += to_bin((uint8_t)((value >> 40) & 0xFF)) + separator;text += to_bin((uint8_t)((value >> 32) & 0xFF)) + separator;text += to_bin((uint8_t)((value >> 24) & 0xFF)) + separator;text += to_bin((uint8_t)((value >> 16) & 0xFF)) + separator;text += to_bin((uint8_t)((value >> 8) & 0xFF)) + separator;text += to_bin((uint8_t)(value & 0xFF));return text;}
} // namespace cutl

4. 测试代码

#include "common.hpp"
#include "strfmt.h"void TestToBin()
{PrintSubTitle("TestToBin");uint8_t a = 0x0f;std::cout << "uint8: " << cutl::to_bin(a) << std::endl;uint16_t b = 0xfc;std::cout << "uint16: " << cutl::to_bin(b) << std::endl;uint32_t c = 0x1b02aefc;std::cout << "uint32: " << cutl::to_bin(c) << std::endl;uint64_t d = 0xabcdef0123456789;std::cout << "uint64: " << cutl::to_bin(d) << std::endl;
}

5. 运行结果

---------------------------------------------TestToBin----------------------------------------------
uint8: 0000,1111
uint16: 0000,0000 1111,1100
uint32: 0001,1011 0000,0010 1010,1110 1111,1100
uint64: 1010,1011 1100,1101 1110,1111 0000,0001 0010,0011 0100,0101 0110,0111 1000,1001

6. 源码地址

更多详细代码,请查看本人写的C++ 通用工具库: common_util, 本项目已开源,代码简洁,且有详细的文档和Demo。

本文由博客一文多发平台 OpenWrite 发布!

这篇关于C++数据格式化6 - uint转换成二六进制字符串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080045

相关文章

通过ibd文件恢复MySql数据的操作方法

《通过ibd文件恢复MySql数据的操作方法》文章介绍通过.ibd文件恢复MySQL数据的过程,包括知道表结构和不知道表结构两种情况,对于知道表结构的情况,可以直接将.ibd文件复制到新的数据库目录并... 目录第一种情况:知道表结构第二种情况:不知道表结构总结今天干了一件大事,安装1Panel导致原来服务

Win32下C++实现快速获取硬盘分区信息

《Win32下C++实现快速获取硬盘分区信息》这篇文章主要为大家详细介绍了Win32下C++如何实现快速获取硬盘分区信息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实现代码CDiskDriveUtils.h#pragma once #include <wtypesbase

Jmeter如何向数据库批量插入数据

《Jmeter如何向数据库批量插入数据》:本文主要介绍Jmeter如何向数据库批量插入数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Jmeter向数据库批量插入数据Jmeter向mysql数据库中插入数据的入门操作接下来做一下各个元件的配置总结Jmete

C++ Primer 标准库vector示例详解

《C++Primer标准库vector示例详解》该文章主要介绍了C++标准库中的vector类型,包括其定义、初始化、成员函数以及常见操作,文章详细解释了如何使用vector来存储和操作对象集合,... 目录3.3标准库Vector定义和初始化vector对象通列表初始化vector对象创建指定数量的元素值

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

C++实现回文串判断的两种高效方法

《C++实现回文串判断的两种高效方法》文章介绍了两种判断回文串的方法:解法一通过创建新字符串来处理,解法二在原字符串上直接筛选判断,两种方法都使用了双指针法,文中通过代码示例讲解的非常详细,需要的朋友... 目录一、问题描述示例二、解法一:将字母数字连接到新的 string思路代码实现代码解释复杂度分析三、

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

golang获取prometheus数据(prometheus/client_golang包)

《golang获取prometheus数据(prometheus/client_golang包)》本文主要介绍了使用Go语言的prometheus/client_golang包来获取Prometheu... 目录1. 创建链接1.1 语法1.2 完整示例2. 简单查询2.1 语法2.2 完整示例3. 范围值