Code covered by the BSD License

# Two's Complement Binary Strings

### Drew Compston (view profile)

Convert between binary fixed point two's complement strings and decimal numbers.

fix2dec(t)
```function x = fix2dec(t)

% FIX2DEC Convert binary string fixed point to decimal integer.
%
% Usage: X = FIX2DEC(T)
%
% Converts the two's complement fixed point representation as a string
% given by T with a binary point to decimal values. Specifically, the input
% should be of the form '10011.10110', for example. T can be a character
% array or cell string. Input multiple numbers into T along the rows, and
% the output will be as a column vector. Similarly to BIN2DEC and TWOS2DEC,
% leading spaces in T are sign extended (so treated as either 0 or 1
% depending on the first non space character), and embedded and trailing
% spaces are removed.
%
% Example:
%     >> fix2dec(['10011.10110'; '     11.1  '; ' 0.101110  '])
%
%     ans =
%
%       -12.3125
%        -0.5000
%         0.7188
%
% Inputs:
%   -T: string two's complement fixed point numbers to convert to decimal
%   integers.
%
% Outputs:
%   -X: decimal representation of T.
%

error(nargchk(1, 1, nargin));
if iscellstr(t)
t = char(t);
end

% Get the number of fractional points for each input.
binpt = t == '.';

% Make sure there is only one binary point in every row.
if any(sum(binpt, 2) > 1)
error('fix2dec:tooManyBinaryPoints', ...
'Only one binary point allowed in each row.');
end

% Get number of 0's and 1's after each binary point.
frac = sum((t == '0' | t == '1') & logical(cumsum(binpt, 2)), 2);

% Remove binary point.
t(binpt) = ' ';

% Convert using twos2dec.
x = twos2dec(t) .* 2.^-frac;```