加入数字向量的数字

Mar*_*ius 3 matlab

我对Matlab很新,虽然不是编程.我正在尝试散列一个字符串,并获取一个值作为该字符串的唯一ID.我在FileExchange中使用这个DataHash函数,它将散列作为整数向量返回.到目前为止,我发现将其转换为单个数值的最佳解决方案是:

hash_opts.Format = 'uint8';
hash_vector = DataHash(string, hash_opts);
hash_string = num2str(hash_vector);
% Use a simple regex to remove all whitespace from the string,
% takes it from '1 2 3 4' to '1234'
hash_string = regexprep(hash_string, '[\s]', '');
hashcode = str2double(hash_string);
Run Code Online (Sandbox Code Playgroud)

可重现的示例,不依赖于DataHash:

hash_vector = [1, 23, 4, 567];
hash_string = num2str(hash_vector);
% Use a simple regex to remove all whitespace from the string,
% takes it from '1 2 3 4' to '1234'
hash_string = regexprep(hash_string, '[\s]', '');
hashcode = str2double(hash_string); % Output: 1234567
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法来实现这一点,而不诉诸正则表达式?

hor*_*ler 7

是的,Matlab的正则表达式实现并不是特别快.我建议你使用strrep:

hashcode = str2double(strrep(hash_string,' ',''));
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用不首先插入空格的字符串创建方法:

hash_vector = [1, 23, 4, 567];
hash_string = str2double(sprintf('%d',hash_vector))
Run Code Online (Sandbox Code Playgroud)

只需确保您的哈希值小于2 ^ 53,否则转换为double可能不准确.