matlab:将十六进制值的字符串转换为十进制值?
问题描述:
我写了函数将十万个十六进制字符串转换为值,但需要10秒钟才能在整个数组上执行。 Matlab有一个函数来做到这一点,所以它更快,也就是说:数组少于1秒?matlab:将十六进制值的字符串转换为十进制值?
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
答
shoelzer's答案显然是最好的。
但是,如果你想要做自己的转换,那么你可能会发现这个有用:
假设s
是char矩阵:所有十六进制数的长度是相同的(零填充,如果必要),每行有一个号码。然后
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(:);