if(1 == htonl(1))의 의미를 모르겠습니다.

cocolv의 이미지

float htonf(float val)
{
	float fv;
	int nv;
 
 
	// 바로 이부분
	if(1 == htonl(1)) {
		return val;
	}
	// 여기서 끝
 
 
 
 
	memcpy(&nv,&val,4);
	nv = htonl(nv);
	memcpy(&fv,&nv,4);
 
	return fv;
}

소스가 저렇게 되어있는데 시스템이 빅엔디안인지 체크해보는 부분인가요?

steveyun의 이미지

빅엔디안인지 확인하는 부분이 맞습니다.


{윤종희}

cocolv의 이미지

시스템이 리틀엔디안이면 되게 이상하게 메모리 복사를 하네요

실제 hton,htonl과 같은 바이트순서변환 함수들도 저런식으로 소스가 짜여져있나요?
;;배울게 많네요

라스코니의 이미지

네트웍 endian 은 big endian 이기 때문에 바이트 순서를 뒤집는 거지요.
바꿀려고 하는 데이터형이 float 지만 어자피 4 byte 이므로 정수로 보고 뒤집습니다.

hton 등은 memcpy를 써서는 못하죠. 일일히 바이트를 뒤집어야 할 겁니다.

cocolv의 이미지

hton 와같은 놈들이 어떻게 짜여져있나 궁금한데 어디서 찾아야 될지 모르겠네요;

리눅스는 보니깐

#define htons(x) __bswap_16 (x)

이렇게만 나와있고, 그냥 이론만 알고 넘어가야겠네요

답변 감사합니다^^;