1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.
판매자 | 빛나는 영혼 | 판매 납포인트 | 무료 | 평점 | 4.0점 / 총 9명 참여 |
---|
안녕하세요.
보통 printf ("%lf", 0.1234); 이런식으로 micom 에서 쓰면 0.1234를 PC로 전송합니다.
그럼 PC에서는 걍 받아서 변환하면 되는데...
마이컴과 마이컴끼리 float 전송 할때 0.1234를 변환하는것이 어렵더군요.
윈도우처럼 무슨 함수로 한번에 알아서 변환해 주면 좋을텐데...
일일히 10000을 곱해서 하나씩 추출하는것도 불합리 하고.... 잘못하다간 5.000이 4.9999가 될 수도 있고...
그래서 편하게 할 수 있는게 없을까 하다가 생각한게 float가 4byte 니까 일일히 나누면 편하겠다 생각했습니다.
그래서 만든 함수 입니다. 한번 써 보세요. ^.^
PS : 누군가가 좋은 함수 만들어 놓은거 부탁해요. 참 윈도우는 e 표기법까지 알아서 인식해 주네요. 이거 인식해서 만들기도 귀찮은데 말이죠. ^.^
// 사용법 예제
// byte cBuf1 , cBuf2 , cBuf3 , cBuf4 ;
// util_FloatTo4Byte ( -45.3345 , &cBuf1 , &cBuf2 , &cBuf3 , &cBuf4 ) ;
// fBuf = util_f4ByteToFloat ( &cBuf1 , &cBuf2 , &cBuf3 , &cBuf4 ) ;
// comm_Printf_PC ( " \n %lf " , (float)fBuf ) ;
// cBuf1 (상위 바이트) ~ cBuf4 (하위 바이트)
// 크기 4byte 고정 (가정 : long == float)
float util_f4ByteToFloat ( byte *cBuf1 , byte *cBuf2 , byte *cBuf3 , byte *cBuf4 )
{
float fBuf ;
unsigned long ulBuf1 , ulBuf2 , ulBuf3 , ulBuf4 ;
unsigned long ulBuf ;
ulBuf1 = *cBuf1 ;
ulBuf2 = *cBuf2 ;
ulBuf3 = *cBuf3 ;
ulBuf4 = *cBuf4 ;
ulBuf = (ulBuf1<<24) | (ulBuf2<<16) | (ulBuf3<<8) | (ulBuf4) ;
fBuf = *(float*)&ulBuf ;
return fBuf ;
}
// cBuf1 (상위 바이트) ~ cBuf4 (하위 바이트)
// 크기 4byte 고정 (가정 : long == float)
void util_FloatTo4Byte ( float fBuf , byte *cBuf1 , byte *cBuf2 , byte *cBuf3 , byte *cBuf4 )
{
unsigned long ulBuf ;
ulBuf = *(unsigned long*)&fBuf ;
*cBuf1 = ulBuf >> 24;
*cBuf2 = ulBuf >> 16;
*cBuf3 = ulBuf >> 8 ;
*cBuf4 = ulBuf ;
}
음.....보통 자료형 변환을 할 때 공용체(union)을 사용하시면 좋은 결과를 얻을 수 있습니다.
예를 들어 어떤 컴파일러가 float 형이 4바이트형이라고 가정할 경우 이를 4바이트 캐릭터로 변환하고자
할 때 다음과 같이 사용합니다.
union dataTrans
{
float fData ;
unsigned char cArrData[4] ;
} ;
이런식으로 공용체를 선언해 놓고..
dataTrans transBuf ;
unsigned char output[4] ;
transBuf.fData = 0.1234 ;
를 집어 넣고 나서..
transBuf.cArrData을 보내면 됩니다.
4바이트의 값을 다시 플롯으로 변환하려면.
transBuf.cArrData에 4바이트의 캐릭터를 넣으시고.
transBuf.fData 를 읽으시면 정확히 float값으로 변환된 것을 확인 할 수 있으실 겁니다.
예제를 보여드리면 좋을 건데....지면상..생략하도록 하겠습니다....