[완료]Byte Order 바꾸는 함수 사용 문제(htns, htonl, ntohs, ntohl)
글쓴이: neobug / 작성시간: 월, 2007/12/31 - 11:44오전
Byte order를 바꾸는 함수를 사용해도 변화가 없어서 질문 올립니다.
함수는 ntohl()로도 해보고 htonl() 2가지 다 해보았지만 결과는 같았습니다.
data type 선언도 unsigned long int 로도 해보았지만 같았습니다.
int main() { int data = 0x00001000; data = ntohl(data); printf("%02X\n", data); printf("%d\n",data); }
코드의 결과 화면은 아래와 같습니다.
1000
4096
Forums:
data = 1; 로 하시고
data = 1;
로 하시고 해보세요~
----
Let's shut up and code.
----
Let's shut up and code.
죄송하지만...
어떤의미의 조언인지 잘 모르겠습니다.
결과는
01
1
입니다.
쓰고 나서 잘못
쓰고 나서 잘못 생각했다는 걸 알았습니다. 근데 글을 지울 수가 없더군요;;
매크로 같은 걸로 만들어 쓰시는게 좋을 거 같네요 ^^;;
----
Let's shut up and code.
----
Let's shut up and code.
감사합니다
관심만 가져주셔도 고마울 나름입니다 ㅎㅎ
OS에따라서
OS에 따라서 network byteorder하고 host byteorder하고 같은 경우가 있고
이런경우에는 아무런 변화도 일어나지 않는거 아닌가요?
n to h (netowrk to host) long
환경: Sparc, 솔라리스
저도 그런건 아닐까 하고 생각하고 있습니다
헌데 맞는지 모르겠어요
sparc솔라리스가 그런가요?
### 확인했습니다 ###
i686 아키텍쳐의 linux에서 해보니 잘 바뀌는 군요.
sparc 아키텍쳐는 host byte order가 network byte order와 같네요
결과화면 입니다
1000
4096
100000
1048576
사용중인 컴퓨터가
사용중인 컴퓨터가 빅엔디안이 아닌가요?? ppc등...
아마도 sparc architecture 일겁니다
UNIX 서버에 로그인해서 짜고 있는데요.
호스트 이름이 e3000 이거든요.
하지만 관계없습니다.
htonl()도 해보고
ntohl()도 해봤지만
0x00001000 이라는 byte order가
0x00100000 으로 Converting 되지 않고 있습니다.
스팍은
스팍은 빅엔디안입니다. 그러면 위 결과가 맞겠죠. 네트웍 오더도 빅엔디안이니까요.
======================
BLOG : http://superkkt.com
======================
BLOG : http://superkkt.com
예 저도 막 확인 했습니다
Big Endian Little Endian 관계없이
Byte Order만 거꾸로 뒤집어주는 함수는 없는지 알고 싶네요
/* Swap bytes in 32 bit
무조건 바꾸는 함수가 있는지는 모르겠구요. 일단 위 매크로는 /usr/include/bits/byteswap.h에 있는 내용입니다. 이거 참고해서 직접 만들어 쓰시면 되겠네요.
======================
BLOG : http://superkkt.com
======================
BLOG : http://superkkt.com
감사합니다
순환shift 효과를 내는 함수를 만들려고 했었는데 요로코롬 쉽게 잘되네요 ㅎㅎ
댓글 달기