# Algotithm to Convert 4 byte Hex to 32 bit float

I really struggled hard to find out some sorts of algorithm to convert 4 hex bytes to 32 bit float for my requirement on some analysis of MODBUS protocol. I didn’t find it and it tok me nearly 2 days to design this. Here is the algorithm..

`float ModbusRead(byte id,byte msbAddress,byte lsbAddress,byte msbCrc,byte lsbCrc){      num=1.00;    Serial.write(id);    Serial.write(0x03);    Serial.write((byte)msbAddress);    Serial.write((byte)lsbAddress);    Serial.write((byte)0x00);    Serial.write(0x02);    Serial.write(msbCrc);    Serial.write(lsbCrc);    delay(1000);   for(i=0;i<9;i++)  {     if(!Serial.available())    {     for (int x=0;x < 9;x++)      {       reply[x]=0x00;      }     while(Serial.available()){}     break;    }   reply[i]=Serial.read();  }      while(Serial.available()){}      if((reply[3] &  0x80)!=0)  num=num*-1;    reply[3]=reply[3]<<1;    if((reply[4] & 0x80)!=0x00)  reply[3]=reply[3] | 0x01;  num=num*pow(2,reply[3]-0x7F);    i=0;    delay(1000);    return num*calculatemantisa(reply[4],reply[5],reply[6]);}float calculatemantisa(byte a,byte b,byte c){  float x=1.0000;  if((a & 0x40)!=0x00)      x=x+pow(2,-1);  if((a & 0x20)!=0x00)      x=x+pow(2,-2);  if((a & 0x10)!=0x00)      x=x+pow(2,-3);  if((a & 0x8)!=0x00)      x=x+pow(2,-4);  if((a & 0x4)!=0x00)      x=x+pow(2,-5);  if((a & 0x2)!=0x00)      x=x+pow(2,-6);  if((a & 0x1)!=0x00)      x=x+pow(2,-7);        if((b & 0x80)!=0x00)      x=x+pow(2,-8);  if((b & 0x40)!=0x00)      x=x+pow(2,-9);  if((b & 0x20)!=0x00)      x=x+pow(2,-10);  if((b & 0x10)!=0x00)      x=x+pow(2,-11);  if((b & 0x8)!=0x00)      x=x+pow(2,-12);  if((b & 0x4)!=0x00)      x=x+pow(2,-13);  if((b & 0x2)!=0x00)      x=x+pow(2,-14);  if((b & 0x1)!=0x00)      x=x+pow(2,-15);           if((c & 0x80)!=0x00)      x=x+pow(2,-16);  if((c & 0x40)!=0x00)      x=x+pow(2,-17);  if((c & 0x20)!=0x00)      x=x+pow(2,-18);  if((c & 0x10)!=0x00)      x=x+pow(2,-19);  if((c & 0x8)!=0x00)      x=x+pow(2,-20);  if((c & 0x4)!=0x00)      x=x+pow(2,-21);  if((c & 0x2)!=0x00)      x=x+pow(2,-22);  if((c & 0x1)!=0x00)      x=x+pow(2,-23);              return x;}`
Catch Me On

### Bikash Panda

Blogger / Embedded System Developer at WGLabz
A techie, tinkerer and tech lover, who loves to blog and feels everyone can learn tech provided they have the right attitude towards learning and passion. By profession, I am an IOT developer working in Smart Home/ Smart Grid domain.
Catch Me On