1

100,000個の16進文字列を値に変換する関数を作成しましたが、配列全体で実行するには10秒かかります。Matlabにはこれを行う機能がありますか?そのため、より高速になります...つまり、配列の場合は1秒未満ですか?


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
4

2 に答える 2

5

hex2decを使用してみてください。各文字をループするよりもはるかに高速である必要があります。

于 2013-02-19T16:30:42.673 に答える
2

シュールツァーの答えは明らかに最高です。
ただし、自分で変換を行いたい場合は、次のようにすると便利です。

char行列であると仮定するsと、すべての16進数は同じ長さであり(必要に応じてゼロが埋め込まれます)、各行には1つの数値があります。それで

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(:); 
于 2013-02-19T16:37:58.537 に答える