의견에 따르면 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에 대한 비트를 처리 할 수 . 예 :
왜 'num2str'을 사용하고 있습니까? 왜 'fread'로 부동 소수점 값을 직접 읽지 않습니까? –
그는 문자열 형식을 사용해야한다고했습니다. :/ – kame
num2str() 과학적 형식 (예 : 2.22e-16)의 문자열을 반환합니다 ... 16 진수 값이 아닙니다. 그래서 num2str()의 출력을 hex2num()에 캐스팅하면 실패합니다. – Andreass