Преобразуйте hex 0xAABBCC в строку «AA: BB: CC», используя sprintf - PullRequest
0 голосов
/ 19 октября 2018

У меня есть шестнадцатеричное число 0xaabbcc, которое я хотел бы преобразовать и отформатировать в строку символов как AA:BB:CC.

, используя sprintf(myStr, %X, 0xaabbcc);, что приводит к char myStr[] = "AABBCC";

Можно использовать sprintf или какую-либо другую функцию для преобразования и форматирования 0xaabbcc в AA:BB:CC?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Если вы хотите придерживаться printf и используете GCC (или, может быть, Clang, но я не могу найти ничего задокументированного), тогда вы можете использовать printf cusomization .

Откровенно говоря, ответ @ phuclv, вероятно, лучше.

0 голосов
/ 19 октября 2018

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