byte就是字节的意思。char占用1个字节的存储空间;float占4字节的存储空间。即char和float是1:4的大小关系。
#include <iostream>
using namespace std;
void floatToBytesLittle(float value, unsigned char*cSendBuff, int pos)
{
unsigned short i = 0;
float floatVariable = value;
unsigned char *pdata = (unsigned char *)&floatVariable;
for (i = 0; i < 4; i++)
{
cSendBuff[i + pos] = *pdata++;//float转BYTE
}
}
void floatArr2Bytes(float* floatArr, unsigned int len, unsigned char* byteBufOut) {
unsigned int pos = 0;
unsigned char * temp = nullptr;
int k = 0;
for (int i = 0; i < len; i++) {
temp = (unsigned char *)(&floatArr[i]);
for (k = 0; k < 4; k++) {
byteBufOut[pos++] = *temp++;
}
}
}
void byteToFloat(unsigned char * charBuf, float* out) {
unsigned char i;
void *pf = out;
unsigned char * px = charBuf;
for (i = 0; i < 4; i++){
*((unsigned char*)pf + i) = *(px + i);
}
}
void bytes2FloatArr(unsigned char* bytes, unsigned int len, float* floatArrOut) {
unsigned int position = 0;
unsigned int floatCount = 0;
float * temp = nullptr;
for (int i = 0; i < len; ) {
for (int k = 0; k < 4; k++) {
temp = &floatArrOut[floatCount];
*((unsigned char*)temp + k) = *(bytes + i);
i++;
}
floatCount++;
}
}
int main() {
/*unsigned char * charBuf = new unsigned char[4];
float in = 5.194;
float out = -1;
floatToBytesLittle(in, charBuf, 0);
byteToFloat(charBuf, &out);
cout << out << endl;*/
float floatArr[] = {12.1, 12.24, 13.3, 13.5, 4.5, 0.01};
const unsigned int len = 6;
unsigned char byteBuf[len * 4];
floatArr2Bytes(floatArr, len, byteBuf);
float floatArrOut[len];
bytes2FloatArr(byteBuf, 4 * len, floatArrOut);
for (int i = 0; i < len; i++) {
cout << floatArrOut[i] << ", ";
}
cout << endl;
return 0;
}
end