2011-02-15 5 views
4

은 (는 R2009b) I는 2147484101.MATLAB (MATLAB에서

이 숫자 값을 포함하는 UINT32 변수가 대응 IEEE 단 정밀도 부동 소수점 형식으로 UINT32 (4 바이트) 값 변환의 4- 바이트)는 잡아 당기는 과정에서 디지털 머신 비전 카메라에서 추출되었습니다. 내가 이해하는 바에 따르면 카메라의 셔터 속도의 단 정밀도 형태를 유지합니다 (1/260s = 3.8ms에 가깝습니다).

어떻게이 32 비트 수를 IEEE 단 정밀도 부동 소수점 표현으로 변환합니까 - MATLAB에서 사용 가능한 것을 사용합니까? 가변 N에서 언급 된 값과

, 난 = DEC2HEX NN의 조합을 사용하여 시도 (N, 16) 다음 hex2num (NN). 그러나 그것은 hex2num은 16 진수 코딩이 배정도가되고 여기서는 하나가 아닌 것으로 예상합니다. 적어도이 방법으로 이상한 숫자를 얻고 있습니다.

아이디어가 있으십니까?

편집

: 제공

typecast(uint32(2147484101),'single') %# without swapbytes 
typecast(swapbytes(uint32(2147484101)),'single') %# with swapbytes 

:

ans = 

    -6.3478820e-043 

ans = 

    -2.0640313e+003 

내가 http://www.h-schmidt.net/FloatApplet/IEEE754.html에서 IEEE 754 계산기 (자바 애플릿)을 시도
아래 매트의 대답 @ 시도.

사용 :

format hex 
typecast(uint32(2147484101),'uint8') %# without swapbytes 
typecast(swapbytes(uint32(2147484101)),'uint8') %# with swapbytes 

애플릿 (16 진수)로이 바이트를 입력

ans = 

    c5 01 00 80 

ans = 

    80 00 01 c5 

을 제공하는 것은 나에게 MATLAB과 같은 번호를 제공합니다.

답변

8

기본 비트가 부동 소수점 숫자를 나타내지 만 uint32로 저장되어 있다고 생각합니다.

이 경우 typecast() 함수를 사용하여 단 정밀도 부동 소수점 형으로 캐스팅 (즉, 비트 재 해석) 할 수 있습니다.

b = typecast(a, 'single') 

여기서 a는 변수입니다.

참조 : http://www.mathworks.com/help/techdoc/ref/typecast.html

편집 :하지 캐스트 기능, 타입 변환 기능 ... 내 사과!

+0

네를 수행하여 단일로 저장할 수 있습니다, 그것은 typecast'가 아닌'cast''해야합니다. 그러나 나는 정말로 내가 바라는 가치를 얻지 못하고있다. 알다시피, 나는 그 숫자에 대한 사전 지식이 없다.나는 그들이 올바르게 저장되어 있는지 확신하지 못한다. :) 나는 자바 애플릿을 사용하여 크로스 체크했다. 그래서 당신의 방법은 소리입니다. +1하고 받아들입니다. –

+0

@Ole Thomsen Buus : uint32에 도착한 방법이나 읽는 파일/장치의 사양을 모른 채 다르게 수행 할 작업을 제안하는 것은 어렵습니다. 잘하면 당신은 그것이 잘못되어 가고있는 것을 알아낼 것입니다 ... – Matt

2

fread()로 데이터를 읽을 때 캐스트를 수행 할 수 있습니다.

는 정밀 인수 보라, 당신은 INT32 번호로 읽고

shut_speed=fread(fid,1,'int32=>single'); 
+0

예, 그 가능성도 있습니다. –