Совсем недавно мне пришлось работать с C — обычно я работаю с Python и немного с Java — и столкнулся с некоторыми проблемами.
Я создал функцию, которая преобразует беззнаковое целое число с основанием 10 в массив символов, представляющий эквивалентный шестнадцатеричный код. Теперь мне нужно иметь возможность установить переменную с типом uint32_t в этот «шестнадцатеричный»; что я могу сделать, чтобы убедиться, что этот char[] рассматривается как фактическое шестнадцатеричное значение?
Код ниже:
int DecToHex(long int conversion, char * regParams[])
{
int hold[8];
for (int index = 0; conversion > 0; index++)
{
hold[index] = conversion % 16;
conversion = conversion / 16;
}
int j = 0;
for (int i = 7; i > -1; i--)
{
if (hold[i] < 10 && hold[i] >= 0)
{
regParams[j] = '0' + hold[i];
}
else if (hold[i] > 9 && hold[i] < 16)
{
regParams[j] = '7' + hold[i];
}
else
{
j--;
}
j++;
}
return 0;
}
uint32_t
в строку. C имеет строгую типизацию, что означает, что вы не можете свободно преобразовать один тип в другой. Вы преобразовали двоичное значение в строку. Если вы хотите, чтобы это было двоичное значение, вам придется преобразовать его обратно. Но вы могли бы преобразоватьuint32_t
в шестнадцатеричную строку следующим образом:sprintf(hold, "%lX", conversion)
, хотяhold[8]
не будет достаточно большим, чтобы вместить 0 терминатор, который есть в строках C. - person Weather Vane   schedule 20.05.2015base-10 unsigned int
. Это просто двоичные биты. Разница между десятичным, двоичным, шестнадцатеричным и восьмеричным является просто человеческим решением относительно того, как они представлены в строковом формате (кроме представления BCD, которое не используется в языках высокого уровня). - person Weather Vane   schedule 20.05.2015