float都不超过512.0, -512.0, 怎么将其存储到unsigned char[3]中

float都不超过512.0, -512.0, 如何将其存储到unsigned char[3]中?
float都不超过512.0, -512.0, 如何将其存储到unsigned char[3]中?

float a = 500.0, b=-500.0;

将其存入:
unsigned char data[3];

求算法和解释?

------解决方案--------------------
如果依赖于浮点数本身在内存里面的结构的话, 可以这样:

#pragma pack(1)

union SmallFloat {
unsigned char data[3];
struct  {
unsigned int man  : 18;
unsigned int exp  : 5;
unsigned int sign : 1;
} _SF;
};

union NormalFloat {
float value;
struct  {
unsigned int man  : 23;
unsigned int exp  : 8;
unsigned int sign : 1;
} _NF;
};

#pragma pack()

void nf2sf(float x, unsigned char data[3])
{
NormalFloat& nf = (NormalFloat&)x;
SmallFloat& sf = (SmallFloat&)data[0];
sf._SF.sign = nf._NF.sign;
unsigned int exp = nf._NF.exp;
if(exp > 127 + 15)
exp = 127 + 15;
if(exp < 127 - 15)
exp = 127 - 15;
exp += 15;
exp -= 127;
sf._SF.exp = exp;
sf._SF.man = nf._NF.man >> 5;
}

float sf2nf(unsigned char data[3])
{
NormalFloat nf;
SmallFloat& sf = (SmallFloat&)data[0];
nf._NF.sign = sf._SF.sign;
nf._NF.exp = sf._SF.exp + 127 - 15;
nf._NF.man = sf._SF.man << 5;
return nf.value;
}

int main()
{
unsigned char d[3] = { 0 };
nf2sf(123.456f, d);
printf("%f\n", sf2nf(d));

nf2sf(0.01232454f, d);
printf("%f\n", sf2nf(d));
}