문제

나는 서명되지 않은 바이트 (int8_t) 캐스트에 Signed To Pack Byts에 서명을 사용하고 있습니다.

uint32_t(uint8_t(byte)) << n

이것은 Intel Linux에서 GCC를 사용하여 작동합니다. PowerPC와 같은 다른 플랫폼/컴파일러의 휴대용입니까? 더 좋은 방법이 있습니까? 제 경우에는 비트셋을 사용하는 것이 불가능합니다. 나는 부스트를 통해 stdint를 사용하고 있습니다

도움이 되었습니까?

해결책

사용중인 경우 boost/cstdint.hpp Boost Integer 라이브러리에서, 그렇습니다. Typedefs는 휴대용입니다 (크로스 플랫폼) boost/cstdint.hpp 헤더는 C ++에서 C99 STDINT.H 기능을 구현하기위한 것입니다.

로부터 문서를 높이십시오:

헤더는 특정 정수 너비가 필요한 휴대용 코드를 작성하는 데 유용한 TypEdef를 제공합니다. 모든 typedef는 네임 스페이스 부스트에 있습니다.

다른 팁

UINT32_T 유형이 C ++ 표준의 일부가 아니기 때문에 휴대용이 아닙니다. 그러한 모든 조심은 본질적으로 구현에 따라 다릅니다.

실제로, 그렇습니다. 그렇습니다. 그것은 당신이 만나는 대부분의 다른 플랫폼에서 작동 할 가능성이 높습니다 (특히 부스트가 포팅 된 경우). 그러나 이러한 포장 된 값을 파일 또는 네트워크 소켓에 작성하는 경우 바이트 오더를 처리해야합니다 (PowerPC의 예제는 큰 엔젤 바이트 주문이 있고 인텔은 작은 엔디언이 있습니다). 이와 관련하여 코드는 다른 하드웨어 아키텍처에서 다르게 행동합니다.

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