UDP를 통해 빅 엔디안 데이터를 받고 리틀 엔디 언으로 변환합니다. 소스는 정수가 서명되었지만 signed int (특히 16 비트)의 바이트를 교환 할 때 비현실적인 값을 얻습니다. 서명되지 않은 int로 그들을 교환 할 때 나는 내가 기대하는 것을 얻는다. 원본 문서가 잘못되어 실제로 부호없는 16 비트 int를 보내는 것으로 가정합니다. 하지만 그게 왜 중요할까요? 값은 모두 양수이고 16 비트 INT_MAX 아래에 있어야하기 때문에 오버 플로우가 문제가되지 않아야합니다. 내가 생각할 수있는 유일한 것은 (1) 문서가 잘못되었다는 것입니다. (2) 서명 된 엔디안 스왑을 수행 할 때 제대로 서명 비트를 처리하지 않을 것입니다.부호있는 int의 엔디안 변환
1) 오버 플로우가 문제가 아니라, 내가 서명 또는 부호의 int로 읽어 여부 문제가 않습니다
은 정말 두 가지 질문이 있습니다.
2) 부호있는 값과 부호없는 값 사이에서 엔디안 스와핑이 다른가 (즉, 부호 비트를 다르게 처리해야합니까?)?
엔디안 변환이 부호있는 값과 부호없는 값 모두에 대해 동일하게 보인다고 생각했습니다. 16 비트의 경우 value = value&0xff00 >> 8 | value&0x00ff << 8
.
감사
어떤 프로그래밍 언어입니까? – bmargulies
괄호를 달았 으면 좋겠습니다 (C 인 경우). –