2012-02-10 2 views
1

SWIG Documentation (21.9.1 기본 기본 유형 매핑)에 따라 C uint8_t는 16 비트 인 Java short에 매핑되고 C uint_15_t는 32 비트 인 Java int에 매핑됩니다. 나는 C 함수가 각각 8 비트와 16 비트라고 믿는다. SWIG가 자바로 포장 할 때 비트 수를 두 배로 늘리는 이유는 무엇인가?SWIT의 uint8_t 및 uint16_t에 대한 배치

답변

1

문제는 Java 유형이 항상 서명된다는 것입니다.

따라서 0에서 255 사이의 부호없는 C 유형이있는 경우 해당 범위의 상반부를 나타낼 수있는 가장 작은 Java 유형이 짧습니다.

대안은 자바의 byte의 부정적인 부분을 사용하도록 uint8_t 변환 어떻게 든 이동하거나,하지만의 의미는 매우 반 직관적이다.

+0

이는 uint8_t에 대해 의미가 있지만 uint16_t에 대해서는 그다음 사용할 수 없습니까? 32 비트 int를 사용해야하는 이유는 무엇입니까? – c12

+0

@ c12 정확히 같은 문제가 'uint16_t'에서 발생합니다. 자바에서'short'는 -32,768에서 32,767 사이이고,'uint16_t '는 0에서 65,536까지입니다 -'short'를 사용한다면'uint16_t'의 상반부는 어디로 가야합니까? – Flexo

+0

어떻게 swig가 short 대신 byte를 사용합니까? 나는 자바에서 바이트를 사용하고 이들을 swig 인터페이스에서 전달하는 라이브러리를 사용하고 있습니다. 짧은 바이트의 상향 문자는 부호가 있기 때문에 고통스런 것이다. – Sam

관련 문제