float형을 이기종간에 통신할때 byte order는?

익명 사용자의 이미지

지금 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) 로 하셨기때문인 것 같군요.