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

时间:2018-10-19 15:00:05

标签: c++ printf hexdump

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

使用sprintf(myStr, %X, 0xaabbcc);会产生char myStr[] = "AABBCC";

是否可以使用sprintf或其他函数将0xaabbcc转换并格式化为AA:BB:CC

2 个答案:

答案 0 :(得分:1)

您需要用双引号将说明符字符串引起来。 printf family收到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)

答案 1 :(得分:0)

如果您想坚持使用printf并且使用的是GCC(或者也许是Clang,但我找不到任何文档记录),则可以使用printf cusomization

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