2012-10-16 6 views
2

짧은 길이에 hton을 사용한 후 2 바이트 short (일반 short)를 단지 2 바이트 문자열 (char *)로 변환하는 방법. 문제는 htons 메서드가 int (4 바이트)를 반환한다는 것입니다. 어떻게 2 바이트 문자열에 넣을 수 있습니까 ???C에서 2 바이트 문자열로 2 바이트 짧음?

참고 : 원래 값을 얻으려면 결과에 ntohs를 사용할 수 있어야합니다. 조언에

감사합니다 : D

+0

'짧은'또는 'int'로 변환 하시겠습니까? 'int'는 요즘 대부분 4 바이트입니다. – JohnB

+0

htons가 다른 short를 리턴한다고 생각했기 때문에 진짜 문제는 short를 2 바이트 문자열로 변환하는 것입니다. –

답변

3

AHM, 당신은 htons이, htons 내 리눅스에, 4 바이트 정수를 반환 말을 어떻게 따라서 당신이 할 수

uint16_t htons(uint16_t hostshort); 

의 프로토 타입이있다

uint16_t value; 
value = htons(hostshort); 
char *bytes = &value; 
// now the first 2 bytes pointed to by "bytes" are the value in network byte order 

즉, 반환 값은 2 바이트입니다.

그렇다면 htons 다음에 반환 값에 대한 그런 비트 표현이 값 ((unsigned char *) 값) [0]의 첫 번째 바이트가 가장 중요하다는 것을 보증합니다. 최하위.

+0

그게 나에게 똑같은 문제는 아니지만, 이제는 문제가 단지 2 바이트 문자열로 가져 오는 방법이다. 나는 sprintf를 사용하여 시도했지만 상상했다. 예를 들어 htons는 2000을 반환합니다.이를 어떻게 2 바이트 문자열에 저장할 수 있습니까 ?? :( –

2
short i; 
// ... 
char s [3]; 
s [0] = (i >> 8) & 0xFF; 
s [1] = i & 0xFF; 
s [2] = '\0'; 
+0

s [0]을 넣고 0xFF를 정확히 넣을 수 있습니까? : –

+0

(i >> 8)은 i의 8 비트를 8로 시프트하므로 상위 8 비트를 마스크하는 & 0xFF와 함께 하위 8 비트에 i & 0xFF는 i의 하위 8 비트를 저장합니다. 1]. null에 대한 s [2] – DaV

+0

음수의 정수에서 구현 정의 된 동작을 피하기 위해'i'를'unsigned (short) '로 먼저 캐스팅합니다. –

관련 문제