진공/노하우
IEEE-754 FLOATING POINT CONVERTER
하이백
2025. 2. 28. 10:54
드라이버를 맹글어야 한다.
IEEE-754 Floating Point를 말이다.
새로운 장치가 IEEE-754를 사용한단다. 그럼 찾아봐야지. 역시 자료가 별로 없따.
" 나라 말씀이 거시기와 달라 ... "
세종 대왕 께서는 이미 알고 계셨던 것인가? 그 옛날 컴퓨터가 사용하는 데이터 구조가 서로 달라 이를 표준화하는 작업이 있었으니 이것중에 하나가 IEEE-754 규격이다.
고정된 데이타 사이즈에 부호+지수+숫자를 조합하여 실수를 표현하였다.
IEEE-754 Floating point converter 코드를 정리하였다.
이를 십진수로 다시 십진수를 이것으로 변환이 가능하다. 통신중 생각보다 많은 장치가 사용한다. 참고하시라.
아래 코드를 테스트 하면서 참조한 사이트
https://www.h-schmidt.net/FloatConverter/IEEE754.html
using System;
using System.Reflection;
class Program
{
static float IEEE754ToDecimal(uint ieee754)
{
// Extract the sign (1 bit)
int sign = (int)((ieee754 >> 31) & 1);
// Extract the exponent (8 bits)
int exponent = (int)((ieee754 >> 23) & 0xFF);
// Extract the mantissa (23 bits)
int mantissa = (int)(ieee754 & 0x7FFFFF);
// Calculate the decimal value using the IEEE 754 formula
float result = (sign == 0 ? 1 : -1) * (1 + (mantissa / (float)(1 << 23))) * (float)Math.Pow(2, exponent - 127);
return result;
}
static uint DecimalToIEEE745(double pValue)
{
// 32 Bit
float fValue = (float)Convert.ToDouble(pValue);
uint hex32 = BitConverter.ToUInt32(BitConverter.GetBytes(fValue), 0);
string sHex = String.Format("{0:X}", hex32);
return hex32;
}
static void Main()
{
double nUserVal = 123.456;
// Convert Decimal to IEEE754
uint ieee754 = DecimalToIEEE745(nUserVal);
Console.WriteLine("Convert IEEE754 to Deciamal : " + nUserVal.ToString() + " -> " + ieee754.ToString("X"));
// Convert IEEE754 to decimal
float decimalValue = IEEE754ToDecimal(ieee754);
Console.WriteLine("Convert Deciamal to IEEE754 : " + ieee754.ToString("X") + " -> " + nUserVal.ToString());
}
*
결과는