一、指针方式
#include <stdio.h>
#include <stdlib.h>
#include "assert.h"
#define DEBUG_ASSERT
/*
* 功能:将double型数据放入数组中
* 输入:dou->double型数据 arr->数组 arr_len->数组的大小,防止溢出
*/
void put_double_to_arr(double dou , unsigned char *arr, unsigned char arr_len)
{
int i;
unsigned char* q=(unsigned char*)&dou; //将double数据的地址转换成与数组相同的(unsigned char*)类型
#ifdef DEBUG_ASSERT
assert(arr);
assert(arr_len >= 8);
#endif
if(arr_len < 8) //判断数组大小,防止溢出
return;
for (i = 0; i <8 ; i++)
{
*(arr+i)=*(q+i); //将double数据保存到数组中
}
}
/*
* 功能:从数组中取出double型数据
* 输入:dou->double型数据 arr->数组
*/
void get_double_from_arr(double *p_dou , unsigned char *arr)
{
#ifdef DEBUG_ASSERT
assert(p_dou);
assert(arr);
#endif
*p_dou = *(double*)arr; //将数组指针转换成double指针类型,然后取出值给目标地址
}
/*
* 功能:将flaot型数据放入数组中
* 输入:flo->float型数据 arr->数组 arr_len->数组的大小,防止溢出
*/
void put_float_to_arr(float flo , unsigned char *arr, unsigned char arr_len)
{
int i;
unsigned char* q=(unsigned char*)&flo; //将float数据的地址转换成与数组相同的(unsigned char*)类型
#ifdef DEBUG_ASSERT
assert(arr);
assert(arr_len >= 4);
#endif
if(arr_len < 4) //判断数组大小,防止溢出
return;
for (i = 0; i <4 ; i++)
{
*(arr+i)=*(q+i); //将double数据保存到数组中
}
}
/*
* 功能:从数组中取出float型数据
* 输入:p_flo->float型数据 arr->数组
*/
void get_float_from_arr(float *p_flo , unsigned char *arr)
{
#ifdef DEBUG_ASSERT
assert(p_flo);
assert(arr);
#endif
*p_flo = *(float*)arr; //将数组指针转换成float指针类型,然后取出值给目标地址
}
int main()
{
double get_double_data;
float get_float_data;
unsigned char double_arr[8]; //存放double数据的数组
unsigned char float_arr[4]; //存放flaot数据的数组
put_double_to_arr(3.123456 , double_arr, sizeof(double_arr)); //将double数组存入数组
get_double_from_arr(&get_double_data , double_arr); //从数组中取出double数组
printf("*data_getted=%lf\n",get_double_data);
put_float_to_arr(3.123456 , float_arr, sizeof(float_arr)); //将float数组存入数组
get_float_from_arr(&get_float_data , float_arr); //从数组中取出float数组
printf("*data_getted=%lf\n",get_float_data);
return 0;
}