Во-первых, не используйте malloc () для небольшого фиксированного пространства;использовать массив.Во-вторых, не переключайтесь, и вообще, в коде ядра, старайтесь избегать расходящихся путей управления.Наконец, если предполагается, что это строка в стиле C, она должна заканчиваться '\0'
.
. Рассмотрим что-то вроде:
#include <cstdint>
enum { max_digits = 3, modulus = 10 };
struct stringized_byte_t {
char[max_digits+1] buffer;
}
stringized_byte_t stringize_a_byte(uint8_t my_byte)
{
uint8_t digits[max_digits];
uint8_t num_digits = 1;
uint8_t remainder = my_byte;
while(remainder >= modulus) {
uint8_t dividend = remainder / modulus;
digits[num_digits - 1] = remainder - dividend * modulus;
num_digits++;
remainder = dividend;
}
// at this point we have one digit left (although it might be 0),
// and we know the overall number of digits, so:
digits[num_digits - 1] = remainder;
// Now we need to flip the digit direction to fit the printing order,
// and terminate the string
stringized_byte_t sb;
for(int i = 0; i < num_digits; i++) {
sb.buffer[i] = '0' + digits[num_digits - i - 1];
}
sb.buffer[num_digits] = '\0';
return sb;
}
Примечание. Я использовал кодирование в стиле Cчем «раскрутить» класс, так что вы можете очень легко преобразовать этот код в правильный C.