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

前端之家收集整理的这篇文章主要介绍了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&C++相关文章