안녕하세요. 세상에는 다양한 장비가 있고 그 장비중에서는 메모리안에 데이터가 부동소수점형태로 저장되어있어서, 이것을 읽기 위해서 정수형의 형태로 데이터를 변환해줘야 할 때가 있어요. 이번에는 그에 대한 프로그램을 작성해볼게요.
참고로 여기서 사용하는 부동소수점은 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승을 곱하면 될거에요.
'프로그래밍 > C' 카테고리의 다른 글
[C언어] C, C++ 코드실행시간 측정하기 (0) | 2020.10.01 |
---|---|
[C언어]제곱을 구하는 pow함수! 음수의 제곱도 구할 수 있을까? (0) | 2020.10.01 |
[C언어]CMD Printf 고급 스킬! (c언어 커서 위치 바꾸기) (0) | 2020.09.30 |
[C언어]INI파일 사용하기 (GetPrivateProfileString) (0) | 2020.09.30 |
[C언어]C언어 시리얼통신 - CreatFile (RS232, RS485 등) (0) | 2020.09.30 |