Для преобразования целочисленного значения я бы сделал очень похожий на ответ Джона Рипли, но немного другой механизм. Применяются те же предостережения - float и int должны иметь одинаковый размер и порядковый номер, и float должен быть IEEE, если начальное шестнадцатеричное значение должно рассматриваться как IEEE:
float tmp;
unsigned int src = 0x424ce027;
std::memcpy(&tmp, &src, sizeof tmp);
Вы спрашиваете, как преобразовать в число с плавающей запятой, а затем как преобразовать в десятичную. Число с плавающей запятой не десятичное . Чтобы преобразовать число с плавающей точкой в десятичную строку, вам нужно что-то вроде printf("%g", tmp);
Если вы начинаете с массива unsigned char, а не int, то любое прямое копирование из массива требует заполнения массива с тем же порядком байтов, что и на вашей платформе. Ваш массив с прямым порядком байтов, но Intel с прямым порядком байтов. Таким образом, вы можете reverse
массив, как в ответе Джона Б., если вы знаете, что порядковый номер вашей платформы противоположен порядковому порядку массива. Если вы знаете, что массив является прямым порядком байтов, и вы не знаете, что такое порядковый номер вашей платформы, вы можете сделать это (предполагая, что в массиве 8 битов на символ):
unsigned int src = 0;
for (int i = 0; i < sizeof src; ++i) {
src = (src << 8) + ptr[i];
}
Затем продолжайте как прежде.