문제

C/C ++에서, 다중 바이트 와이드 문자 (WCHAR_T) 값이 빅 엔디 언 시스템에서 작은 엔디 언 시스템 (또는 그 반대로)으로 전송되는 경우 다른 쪽에서 동일한 값이 나올 것인가? 아니면 바이트를 교환해야합니까?

도움이 되었습니까?

해결책

예, 교체해야합니다.
바이트는 동일한 순서로 전송에서 검색됩니다. 다른 쪽 끝 에서이 바이트의 순서는 다른 의미를 갖습니다. 따라서 올바른 엔디언으로 변환해야합니다 (단어입니까?).

시도되고 진정한 방법은 전송하기 전에 네트워크 바이트 순서로 변환하는 것입니다. 그런 다음 영수증시 호스트 특정 바이트 순서 (네트워크 바이트 순서)로 다시 변환하십시오.

Endian 변환에 도움이되는 기능 세트 :

ntohs   Convert a 16-bit quantity from network byte order to host byte order
ntohl   Convert a 32-bit quantity from network byte order to host byte order
htons   Convert a 16-bit quantity from host byte order to network byte order
htonl   Convert a 32-bit quantity from host byte order to network byte order

또 다른주의 사항을 추가하기 위해.
다른 시스템은 WCHAR_T의 크기가 다른 크기를 사용하므로 크기 (WCHAR_T) == 2를 가정하지 마십시오.

또한 각 호스트는 WCHAR_T에 대해 다른 표현 형식을 사용할 수 있습니다.
이 대부분의 시스템을 처리하기 위해 텍스트를 알려진 전송 형식으로 변환합니다 (UTF-8 또는 UTF-16은 좋은 선택입니다). 텍스트를 다른 쪽 끝의 호스트 특정 형식으로 되돌립니다.

IBM의 ICU를 볼 수 있습니다. 이것은이 모든 기능이 있습니다.

다른 팁

엔디 어 전환은 충분하지 않으며 결과적으로 필요하지 않습니다. 크기 (WCHAR_T)는 다르므로 인코딩도 다릅니다. 따라서 교환 형식에 동의해야합니다. 논리적 선택은 UTF-8입니다. 그러나 UTF-8은 바이트 지향적이므로 더 이상 엔디 니스 문제가 없습니다.

예, 엔디 언 변환을 수행해야합니다. 직렬화 형식, 즉 네트워크를 통해 전송되거나 디스크 파일에 저장되는 바이트 순서를 신중하게 정의하십시오. 그런 다음 데이터를 보낼 때 기본에서 와이어 형식에서 와이어 형식으로 변환하고 (바이트 교환이 필요하지 않을 수도 있음) 데이터를 수신 할 때 와이어에서 기본 형식으로 변환합니다 (다시 바이트 교환이 필요하거나 필요하지 않을 수 있음). 대다수의 고객이 사용하는 와이어 형식을 선택하여 평균 바이트 교환량을 최소화해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top