2011-12-20 4 views

ответ

4

В Matlab можно использовать функции Java JDK.

Короткий ответ для преобразования с плавающей точкой (одинарной точности 32-битное число) в Matlab в двоичное строковое представление может быть:

flt=3.14 
import java.lang.Integer java.lang.Float; 
Integer.toBinaryString(Float.floatToIntBits(flt)) 

Длинный ответ: преобразование поплавка (число одинарной точности 32-бит) в Matlab в двоичном строковое представление

function out=float2binstring(flt) 
% converts a float number to binary in matlab according to IEEE754 
% 
% Usage: 
% float2binstring(-3.14) 
% 
% http://www.h-schmidt.net/FloatApplet/IEEE754.html 
% 
% Limitations: 
% Rounding errors: Not every decimal number can be expressed exactly as a  floating 
% point number. This can be seen when entering "0.1" and examining its binary  representation which is either slightly smaller or larger, depending on the last bit. 
% 
% Andrej Mosat, [email protected] 
% 03/2012 
% v0.0 
% License: GNU GPL 
% 
% See also: BINSTRING2FLOAT 


% this is a trick to use java JDK should be installed, tested on Matlab R2010 
import java.lang.Integer java.lang.Float; 

if (~isnumeric(flt)) 
    error('input must be a number'); 
end 

out=Integer.toBinaryString(Float.floatToIntBits(flt)); 
end 

И преобразования двоичной строки плавать с минимальными накладными расходами:

function out=binstring2float(binstr) 
    % converts a binary string to float number according to IEEE754 
    % 
    % Usage: 
    % binstring2float('11000000010010001111010111000011') 
    % -3.14 
    % 
    % 
    % http://www.h-schmidt.net/FloatApplet/IEEE754.html 
    % 
    % Limitations: 
    % Rounding errors: Not every decimal number can be expressed exactly as a floating 
    % point number. This can be seen when entering "0.1" and examining its binary representation which is either slightly smaller or larger, depending on the last bit. 
    % 
    % Andrej Mosat, [email protected] 
    % 03/2012 
    % v0.0 
    % License: GNU GPL 
    % 
    % See also: FLOAT2BINSTRING 

    import java.lang.Long java.lang.Float; 

    if isequal(class(binstr), 'java.lang.String') 
      binstr=char(binstr); 
    end 

    if (~isstr(binstr)) 
     error('input must be a binary string');            
    end 
    % Error handling for binary strings should be added here 

    % the sign is negative 

    if binstr(2)=='1' 
     binstr(2)=''; 
     isnegative=1; 
    else 
     isnegative=0; 
    end 

    out=Float.intBitsToFloat(Long.parseLong( binstr , 2)); 
    if isnegative 
    out=-out; 
    end 

end 
+0

Как насчет родного кода MATLAB? – Royi

2

Похоже, что вы можете использовать num2hex для преобразования с плавающей запятой в шестнадцатеричной строки.

+0

Вы также можете использовать 'format hex', чтобы просто изменить метод отображения. –

Смежные вопросы