지금 char, int, float등이 포함된 구조체로 소켓 통신하고 있습니다.
그런데 float 변수 처리에 고민입니다.
htonl계열의 함수를 쓰면 0으로 데이타가 다 짤려버리는군여.
해결 방법은 수도 없이 많겠지만, 님께서 htonl 을 이용할 때 실수하셨으리라 생각되는 점은...
sizeof(float)==sizeof(long) 이라고 가정하면,
#include
int main( void ) { float val = 1.52f;
/* htonl 에 이 'l' 값을 사용 */ long l = *(long*)&val;
/* 이기종 머쉰에서 값을 받아 다시 float 로 변환때 */ val = *(float*)&l;
printf( "%f\n", val );
return 0; }
아마도 값이 잘린다는 건, htonl(val) 로 하셨기때문인 것 같군요.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
Re: float형을 이기종간에 통신할때 byte order는?
해결 방법은 수도 없이 많겠지만, 님께서 htonl 을 이용할 때
실수하셨으리라 생각되는 점은...
sizeof(float)==sizeof(long) 이라고 가정하면,
#include
int main( void )
{
float val = 1.52f;
/* htonl 에 이 'l' 값을 사용 */
long l = *(long*)&val;
/* 이기종 머쉰에서 값을 받아 다시 float 로 변환때 */
val = *(float*)&l;
printf( "%f\n", val );
return 0;
}
아마도 값이 잘린다는 건, htonl(val) 로 하셨기때문인 것 같군요.
댓글 달기