Hoje mostro como fazer a conversão de float microchip para IEEE e vice-versa assim sendo disponibilizo os metodos para essas conversões.
[sections] [section title=”Conversão de float microchip para IEEE e vice-versa”]

private float ConvertMicrochipFloatToIEEE(byte[] bytes)
{
if (bytes.Length != 4)
{
throw new Exception("Error qtd bytes");
}
bool sign = ((bytes[2] & 0x80) == 0x80);
bytes[2] = (byte) (bytes[2] & 0x7f);
var vConvertido = (ushort) (bytes[3] << 7 )|bytes[2];
vConvertido |= (UInt16) (sign ? 0x8000 : 0);
byte[] bytesvConvertidoParcial = BitConverter.GetBytes(vConvertido);
var bytesvConvertido = new[] { bytes[0], bytes[1], bytesvConvertidoParcial[0], bytesvConvertidoParcial[1] };
return BitConverter.ToSingle(bytesvConvertido, 0);
}

private byte[] ConvertIEEEFloatToMicrochip(float value)
{
if (bytes.Length != 4)
{
throw new Exception("Error qtd bytes");
}
byte[] b = BitConverter.GetBytes(value);
var c = (ushort) (b[3] << 8 | b[2]);
c <<= 1;
c &= 0xff00;
c |= (ushort) (b[2] & 0x7F);
byte[] d = BitConverter.GetBytes(c);
return (new[] {d[1], d[0], b[1], b[0]});
}

[/section] [/sections]
Obrigado e até o próximo post.

DATEK Tecnologia Eletrônica
[C#] Conversão de float microchip para IEEE e vice-versa
Tags:                                 

Deixe uma resposta

%d blogueiros gostam disto: