짧은 길이에 hton을 사용한 후 2 바이트 short (일반 short)를 단지 2 바이트 문자열 (char *)로 변환하는 방법. 문제는 htons 메서드가 int (4 바이트)를 반환한다는 것입니다. 어떻게 2 바이트 문자열에 넣을 수 있습니까 ???C에서 2 바이트 문자열로 2 바이트 짧음?
참고 : 원래 값을 얻으려면 결과에 ntohs를 사용할 수 있어야합니다. 조언에
감사합니다 : D
짧은 길이에 hton을 사용한 후 2 바이트 short (일반 short)를 단지 2 바이트 문자열 (char *)로 변환하는 방법. 문제는 htons 메서드가 int (4 바이트)를 반환한다는 것입니다. 어떻게 2 바이트 문자열에 넣을 수 있습니까 ???C에서 2 바이트 문자열로 2 바이트 짧음?
참고 : 원래 값을 얻으려면 결과에 ntohs를 사용할 수 있어야합니다. 조언에
감사합니다 : D
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]의 첫 번째 바이트가 가장 중요하다는 것을 보증합니다. 최하위.
그게 나에게 똑같은 문제는 아니지만, 이제는 문제가 단지 2 바이트 문자열로 가져 오는 방법이다. 나는 sprintf를 사용하여 시도했지만 상상했다. 예를 들어 htons는 2000을 반환합니다.이를 어떻게 2 바이트 문자열에 저장할 수 있습니까 ?? :( –
short i;
// ...
char s [3];
s [0] = (i >> 8) & 0xFF;
s [1] = i & 0xFF;
s [2] = '\0';
s [0]을 넣고 0xFF를 정확히 넣을 수 있습니까? : –
(i >> 8)은 i의 8 비트를 8로 시프트하므로 상위 8 비트를 마스크하는 & 0xFF와 함께 하위 8 비트에 i & 0xFF는 i의 하위 8 비트를 저장합니다. 1]. null에 대한 s [2] – DaV
음수의 정수에서 구현 정의 된 동작을 피하기 위해'i'를'unsigned (short) '로 먼저 캐스팅합니다. –
'짧은'또는 'int'로 변환 하시겠습니까? 'int'는 요즘 대부분 4 바이트입니다. – JohnB
htons가 다른 short를 리턴한다고 생각했기 때문에 진짜 문제는 short를 2 바이트 문자열로 변환하는 것입니다. –