使用 sprintf 将十六进制0xAABBCC转换为字符串"AA:BB:CC"

Convert hex 0xAABBCC to string "AA:BB:CC" using sprintf

本文关键字:AA BB CC 字符串 sprintf 十六进制 0xAABBCC 转换 使用      更新时间:2023-10-16

我有一个十六进制数0xaabbcc我想将其转换为字符字符串作为AA:BB:CC

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

是否可以使用sprintf或其他功能将0xaabbcc转换和格式化为AA:BB:CC

您需要用引号将说明符字符串括起来。printf系列接收一个const 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)

如果你想坚持使用printf并且你正在使用GCC(或者可能是Clang,但我找不到任何记录(,那么你可以使用printf cusomization。

坦率地说,@phuclv的答案可能更好。