jdl
jdl

Reputation: 6323

matlab: convert a string of hex values to a decimal value?

I wrote functions to convert 100,000 hex strings to values, but it takes 10 seconds to perform on the whole array. Does Matlab have a function to do this, so that it is faster, ... ie: less than 1 second for the array?


function x = hexstring2dec(s)
[m n] = size(s);

x = zeros(1, m);
for i = 1 : m
    for j = n : -1 : 1
       x(i) = x(i) + hexchar2dec(s(i, j)) * 16 ^ (n - j);
    end
end

function x =  hexchar2dec(c)

if c >= 48 && c <= 57
    x = c - 48;
elseif c >= 65 && c <= 70
    x = c - 55;
elseif c >= 97 && c <= 102
    x = c - 87;
end

Upvotes: 1

Views: 3384

Answers (2)

Shai
Shai

Reputation: 114796

shoelzer's answer is obviously the best.
However, if you want to do the conversion by yourself, then you might find this useful:

Assuming s is a char matrix: all hex numbers are of the same length (zero padded if necessary) and each row has a single number. Then

ds = double( upper(s) ); % convert to double
sel = ds >= double('A'); % select A-F
ds( sel ) = ds( sel ) - double('A') + 10; % convert to 10 - 15
ds(~sel)  = ds(~sel) - double('0'); % convert 0-9
% do the sum through vector product
v = 16.^( (size(s,2)-1):-1:0 );
x = s * v(:); 

Upvotes: 2

shoelzer
shoelzer

Reputation: 10708

Try using hex2dec. It should be faster much faster than looping over each character.

Upvotes: 5

Related Questions