首页 > 解决方案 > 使用 sprintf 将十六进制 0xAABBCC 转换为字符串“AA:BB:CC”

问题描述

我有一个十六进制数字0xaabbcc,我想将其转换为 char 字符串并将其格式化为AA:BB:CC.

使用sprintf(myStr, %X, 0xaabbcc);结果char myStr[] = "AABBCC";

是否可以使用或其他一些功能来sprintf转换和格式化? 0xaabbccAA:BB:CC

标签: c++printfhexdump

解决方案


您需要用引号将说明符字符串括起来。该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)

推荐阅读