Вам необходимо заключить строку спецификатора в кавычки.Семейство 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)