[C언어]부동소수점으로 저장된 데이터를 정수형으로 바꾸기
안녕하세요. 세상에는 다양한 장비가 있고 그 장비중에서는 메모리안에 데이터가 부동소수점형태로 저장되어있어서, 이것을 읽기 위해서 정수형의 형태로 데이터를 변환해줘야 할 때가 있어요. 이번에는 그에 대한 프로그램을 작성해볼게요.
참고로 여기서 사용하는 부동소수점은 IEEE754(https://ko.wikipedia.org/wiki/IEEE_754)를 참조했어요
출력 데이터가 16비트일 경우(혹은 상위16비트만 읽은 경우)
#define DECIMAL 100 //소수점 2자리까지 보기 위해 결과값에 100을 곱해주고 소수점을 자름
#define BIAS 127 //지수에 더해주는 값(IEEE754)
out = 메모리에서 읽어온 데이터 값
outSign= *out & 0b1000000000000000 ? -1 : 1; // 부호비트가 1이면 음수,
outExp =((*out & 0b0111111110000000)>>7)-BIAS; // 지수비트를 구하는 코드.
outFrac= *out & 0b0000000001111111; // 가수비트를 구하는 코드.
outTemp=pow(2,outExp)*(1+(float)outFrac/128); // 가수에 지수를 곱하는 코드. pow함수는 제곱을 구하는 함수
*out=outTemp*outSign*DECIMAL; // 부호(outsing)와 소수점(DECIMAL)을 결정하는 코드.
만약 32비트짜리 데이터를 읽는 경우, Sign과 Exp뒤에 0을 16개, Frac뒤에 1을 16개 추가해주시면 되요. 그리고 outTemp에서 나누는값(128)에 2의 16승을 곱하면 될거에요.