Я пытаюсь создать функцию, которая примет переменную float и преобразует ее в массив байтов. Я нашел фрагмент кода, который работает, но хотел бы повторно использовать его в функции, если это возможно.
Я также работаю с окружением Arduino, но я понимаю, что он принимает большинство языков C.
В настоящее время работает:
float_variable = 1.11;
byte bytes_array[4];
*((float *)bytes_array) = float_variable;
Что я могу изменить здесь, чтобы эта функция работала?
float float_test = 1.11;
byte bytes[4];
// Calling the function
float2Bytes(&bytes,float_test);
// Function
void float2Bytes(byte* bytes_temp[4],float float_variable){
*(float*)bytes_temp = float_variable;
}
Я не так хорошо знаком с указателями и такими, но я читал, что (float) использует кастинг или что-то еще?
Любая помощь будет принята с благодарностью!
Приветствия
* EDIT: SOLVED
Здесь моя последняя функция, которая работает в Arduino для всех, кто находит это. В ответах ниже есть более эффективные решения, но я думаю, что это хорошо понять.
Функция: преобразует входную переменную float в массив байтов
void float2Bytes(float val,byte* bytes_array){
// Create union of shared memory space
union {
float float_variable;
byte temp_array[4];
} u;
// Overite bytes of union with float variable
u.float_variable = val;
// Assign bytes to input array
memcpy(bytes_array, u.temp_array, 4);
}
Вызов функции
float float_example = 1.11;
byte bytes[4];
float2Bytes(float_example,&bytes[0]);
Спасибо за помощь, я так много узнал о указателях и ссылках за последние 20 минут, Cheers Stack Overflow!