1. 关键词
C++ 数据格式化 字符串处理 std::string int bin 跨平台
2. strfmt.h
| #pragma once |
| |
| #include <string> |
| #include <cstdint> |
| #include <sstream> |
| #include <iomanip> |
| |
| namespace cutl |
| { |
| |
| |
| |
| |
| |
| |
| |
| std::string to_bin(uint8_t value, char separator = ','); |
| |
| |
| |
| |
| |
| |
| |
| std::string to_bin(uint16_t value, char separator = ' '); |
| |
| |
| |
| |
| |
| |
| |
| std::string to_bin(uint32_t value, char separator = ' '); |
| |
| |
| |
| |
| |
| |
| |
| std::string to_bin(uint64_t value, char separator = ' '); |
| } |
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; |
| } |
| } |
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。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战