c++ - 使用 sprintf 将十六进制 0xAABBCC 转换为字符串“AA:BB:CC”
问题描述
我有一个十六进制数字0xaabbcc
,我想将其转换为 char 字符串并将其格式化为AA:BB:CC
.
使用sprintf(myStr, %X, 0xaabbcc);
结果char myStr[] = "AABBCC";
是否可以使用或其他一些功能来sprintf
转换和格式化? 0xaabbcc
AA:BB:CC
解决方案
您需要用引号将说明符字符串括起来。该printf
系列接收 aconst char*
作为格式字符串。单独在字符串之外表示以 x 为模的东西,如果在您的情况下%x
之前没有整数,则会导致编译器错误%
之后,只需拆分要打印的字节
unsigned v = 0xAABBCCU;
sprintf(myStr, "%02X:%02X:%02X", v >> 16, (v >> 8) & 0xFFU, v & 0xFFU); // or
sprintf(myStr, "%02X:%02X:%02X", v >> 16, (uint8_t)(v >> 8), (uint8_t)v);
但是,由于您使用的是 C++,因此使用 std::string 会更安全
std::stringstream myStr;
myStr << std::hex << std::setfill('0')
<< std::setw(2) << (v >> 16)
<< std::setw(2) << ((v >> 8) & 0xFFU)
<< std::setw(2) << (v & 0xFFU)
推荐阅读
- gnuplot - 迭代地在绘图/图形/画布上堆叠曲线
- c# - 如何将 Json 对象的 Json 数组转换为 XML C#
- c - 我将如何读取 C (*not* C++) 中的 NTFS 主文件表?
- soap - DocuSign SOAP 错误:此帐户缺少足够的权限
- java - ResponseStatusException 类的错误处理
- java - 如何自定义我的 log4j2.xml 参数
- python - 有没有办法在 python 中发送/按下 NUMPAD 键?
- c# - 递归方法的 IEnumerable 比使用 foreach 构造的相同 IEnumerable 慢 10 倍
- sql-server - SQL Server 2017 触发器 - 声明变量
- android - 在运行时验证 android 库的 (aar) 签名