我有一个十六进制数字0xaabbcc
,我想将其转换为AA:BB:CC
并将其格式化为char字符串。
使用sprintf(myStr, %X, 0xaabbcc);
会产生char myStr[] = "AABBCC";
是否可以使用sprintf
或其他函数将0xaabbcc
转换并格式化为AA:BB:CC
?
答案 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的答案可能更好。