2011-03-08 3 views
2

IEEE 754에 따라 32 비트 16 진수 값을 부동 소수점 값으로 어떻게 변경할 수 있습니까?matlab에서 32 비트 부동 소수점 (IEEE 754) 변환

편집 :

... 
data = fread(fid,1,'float32'); 
disp(data); 
... 

나는이 답변 수 :

4.2950e + 009 1.6274e + 009 ...

을하지만 어떻게 내가 (IEEE를 부동 소수점 32 비트를받을 수 있나요 754) numbers?

+0

왜 'num2str'을 사용하고 있습니까? 왜 'fread'로 부동 소수점 값을 직접 읽지 않습니까? –

+0

그는 문자열 형식을 사용해야한다고했습니다. :/ – kame

+0

num2str() 과학적 형식 (예 : 2.22e-16)의 문자열을 반환합니다 ... 16 진수 값이 아닙니다. 그래서 num2str()의 출력을 hex2num()에 캐스팅하면 실패합니다. – Andreass

답변

3

의견에 따르면 16 진수 값은 파일에 문자의 문자열로 저장되어있는 것으로 보입니다. 먼저 8 자 그룹의 파일에서이 문자를 읽으려고합니다. 파일의 특정 형식에 따라 (예 : 8 자의 각 문자 세트는 자체 줄에 있거나 쉼표로 구분됩니다.) 이렇게하려면 FSCANF 또는 TEXTSCAN과 같은 함수를 사용하십시오. 예를 들어, 데이터 파일은 다음과 같다 경우 :

409BFFFF 
3B3C0000 
85E60000 

는 그런 다음과 같이 문자 배열로 데이터를 읽을 수 있습니다

fid = fopen(fileName,'r'); %# Open the file 
data = textscan(fid,'%s'); %# Read the data 
charArray = char(data{1}); %# Create a character array 
fclose(fid);    %# Close the file 

지금 당신이 이러한 32 비트 16 진수 문자열로 변환해야 단 정밀도 표현. 가장 쉬운 방법은 HEX2DEC 함수를 사용하여 문자열을 정수 (배정도 값으로 저장)로 변환하고 함수 UINT32을 사용하여 부호없는 32 비트 정수로 변환 한 다음 32 비트 정수를 단 정밀도로 형변환하는 것입니다 표현은 기능을 사용하여 TYPECAST.

>> values = typecast(uint32(hex2dec(charArray)),'single'); 
>> fprintf('% 1.42f\n',values); %# Display the values 
4.874999523162841800000000000000000000000000 
0.002868652343750000000000000000000000000000 
-0.000000000000000000000000000000000021629096 

당신이 결과가 this online hexadecimal-to-floating-point converter를 사용 올바른지 확인할 수 있습니다 : 나는 위가 샘플 데이터에 이것을 적용하면 이러한 결과를 제공합니다. 아무도 관심이 경우


, 당신은 먼저 정수 표현으로 문자열을 변환하는 기능 HEX2DEC를 사용하여 위의 형식 변환 자신을 수행 할 수 있습니다, 다음 기능 BITGET 추출하고 sign, exponent, and fraction of the single-precision number에 대한 비트를 처리 할 수 . 예 :

관련 문제