데이터 수집을 위해 다른 플랫폼 (일부는 컴퓨터, 일부는 전자 보드)간에 32 비트 부동 소수점 값을 전달해야합니다. 통신 프로토콜에서 NAN 수레를 사용하여 오류를 전달하고 싶습니다. 문제는 많은 NAN이 있으며 특히 0x7FA00000을 사용하고 싶습니다.float에 Int32 NAN 캐스팅
float value = DAQ_SYSTEM_ERROR;
를 얻을하지 않습니다
문제가#define DAQ_SYSTEM_ERROR (0x7FA00000)
, 이것은 유효한 32 비트 정수하고 있습니다 :
그래서, 내가 정의하는 헤더를 가지고 싶습니다 원하는 결과.
너무 많은 코드없이이를 점으로 찍을 방법이 있습니까? 구체적으로 컴파일러에서 원하는대로 재 컴파일 캐스팅 지시문을 사용할 수 있습니까? 나는 그것이 가능해야한다고 생각하지만, 나는 그것을 관리 할 수 없다.
코드는 C, C++, Objective-C 및 Swift에서 작동해야합니다.
편집은 귀하의 의견 주셔서 감사합니다. 저는 참으로 한 가지 가치에만 관심이 있습니다. 아이디어는 float을 얻은 다음 NAN (0x7FA00000
으로 정의 됨)을 검사하여 검색된 값이 유효한 측정인지 (기록되어야하는지) 또는 어딘가에 오류가 발생했는지 여부를 확인합니다.이 경우 값을 버려야하고 제기하는 플래그. "전송"플랫폼에서 float 값은 0x7FA00000
값의 영향을받습니다. 수신 플랫폼에서 바이트는 0x7FA00000
과 비교하여 먼저 디코딩 된 다음 모든 것이 잘 진행되면 float에 채워집니다.
'float value = 1./0' MAY (표준이 UB인지 아닌지는 알 수 없습니다. 편집 : 또한, 노조를 사용하여 0x7FA00000 정수를 설정 한 다음 float 값을 끌어낼 수 있지만 엔디안 종속입니다 – Creris
@Creris IEEE 단 정밀도 부동 소수점에 대한 NAN 값을 나타내는 16,777,214 가지 다른 방법이 있습니다. OP는 그 중 특정 하나를 원합니다. – ikegami
'union a {int a; float b} u; u.a = 0x7FA00000; return u.b; '트릭을해야합니다. 다시 이것은 엔디안 종속입니다 – Creris