2010-08-05 2 views
3

데이터를 리소스로 바이너리 형식으로 저장하고 int 버퍼로 읽어 들이고 기본적으로 네이티브 C++ 함수로 전달합니다.이 함수는 구조체/클래스로 캐스팅하여 사용할 수 있습니다. 포인터는 분명히 int와 float가 아닙니다.모든 대상에서 기본 유형의 이진 표현이 동일하게 보장됩니까?

질문은 무엇입니까? 내가 수행해야 할 작업은 무엇입니까? ByteOrder.nativeOrder()을 확인하고 빅 엔디안 또는 리틀 엔디안인지 확인한 다음 수행해야합니다 바이트 교환 할 필요가있을 경우.보다

기타, 수레는 아마도 내가 완전히 여기에 내려다 보이는하고있어 다른주의 사항이 있습니까? IEEE 754 형식으로 예상 할 수있는 보장?

(도 - 나는 NDK를 사용하여 컴파일하고 있습니다 때문에, 나는 내 경우에는 (하는 ARMv7-A는) 이미 어떤 아키텍처 알고, 그래서 기술적으로 엔디안 헛소리를 건너 뛰고 데이터를 그것이 방법을 취할 수 있습니까?)

+0

TI의 OMAP 칩은 아마 DSP 측에 대한 부동 소수점 TI 형식을 가지고 있지만, 하드웨어 (VFP 및 FPA 모두)가있는 경우 부동 소수점 IEEE-754 형식입니다 팔. –

+0

armv7 빅 엔디안은 be-8이 아니며 많은 armv5 및 그 이전의 32 대가 아닙니다. 팔에 네이티브 리틀 엔디안 모드를 사용하고, 두통을 스스로 해결하십시오. 소프트 fpu는 컴파일러 라이브러리에서 유래하고 gcc 등은 또한 IEEE 754 형식입니다. –

답변

3

ARM은 크고 작은 엔디안을 모두 지원합니다. 이것은 아마도 OS에 의해 설정 될 것이므로 사전에 확인하는 동안 가치가있을 것입니다.

struct st 
{ 
    char a; 
    int b; 
}; 

sizeof 8이 아닌 예상 5 바이트가됩니다

구조체의 워드 크기에 패딩의 문제도 있습니다. 이것은 int가 단어에 정렬되도록하기위한 것입니다. 일반적으로 모든 것을 4 바이트로 정렬하고 gcc packed 속성 (struct my_packed_struct __attribute__ ((__packed__)) )을 사용하십시오. 이렇게하면 구조체의 내부 구조가 예상대로 유지됩니다.

또는 Android 시뮬레이터를 사용하여 데이터 파일을 생성 할 수 있습니다. DSP를 가진

+0

이 특별한 경우에는 4 바이트 크기의 네이티브 타입 만 사용하고 있습니다. (지금은 64 비트 int에 대한 개념을 이해하지 못할 것입니다.) 저는 128 비트를 꿈꾸지 않을 것입니다. VMX는 지금 당장 등록해야합니다. 그렇기 때문에 VMX는 괜찮습니다. (게다가, 나는 일반적으로 내 구조체에 암시 적 패딩을 피하려고 노력합니다. 정말로 톰을 가지고 있다면, 패딩이 있다는 것을 명확하게하기 위해 char m_Pad [3]을 추가합니다. 그래서 변수를 추가하면 나중에 채울 수 있습니다.) 수레에 관해서는 : IEEE 754가 기본적으로 같은 형식을 보장하기 때문에 걱정하지 않아도 될까요? – EboMike

관련 문제