C将浮点数转换为字节数组的函数

我试图使一个函数接受一个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)使用的是cast或某些东西?

任何帮助将不胜感激!

干杯

*编辑:解决

这是我在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分钟,干杯堆溢出!

解决方法

最简单的是做一个联盟:
#include <stdio.h>

int main(void) {
  int ii;
  union {
    float a;
    unsigned char bytes[4];
  } thing;

  thing.a = 1.234;
  for (ii=0; ii<4; ii++) 
    printf ("byte %d is %02x\n",ii,thing.bytes[ii]);
  return 0;
}

输出

byte 0 is b6
byte 1 is f3
byte 2 is 9d
byte 3 is 3f

注意 – 无法保证字节顺序…这取决于您的机器架构.

要使您的功能正常工作,请执行以下操作:

void float2Bytes(byte* bytes_temp[4],float float_variable){ 
  union {
    float a;
    unsigned char bytes[4];
  } thing;
  thing.a = float_variable;
  memcpy(bytes_temp,thing.bytes,4);
}

还是要真的搞砸了

void float2Bytes(byte* bytes_temp[4],float float_variable){ 
  memcpy(bytes_temp,(unsigned char*) (&float_variable),4);
}

注意 – 在任一种情况下,我确保将数据复制到作为输入参数给出的位置.这是至关重要的,因为局部变量在你返回后不会存在(虽然你可以声明它们是静态的,但是我们不会教你不好的习惯,如果函数再次被调用)

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...