You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB函数中字符串数组转ASCII数组计算哈希遇问题求助

解决MATLAB哈希函数兼容字符串数组的问题

你的核心问题是调用double(array1)后没有将转换结果赋值给变量,导致后续循环仍使用原数组,自然无法生效。完全可以在函数内部完成转换,不需要提前处理输入,修改方案如下:

关键修正点

  • 对字符/字符串数组执行double()转换后,必须将结果赋值给变量(比如arr = double(array1);),后续循环基于这个转换后的数值数组计算哈希。
  • 区分MATLAB中的字符数组(单引号包裹,如'abc')和字符串数组(双引号包裹,如["a","b"]):前者直接用double()就能得到每个字符的ASCII值;后者需要先转换为字符数组再处理,或者用double(string_array)也能直接得到对应ASCII值(MATLAB R2016b及以上支持)。

修改后的完整函数

function [h] = converter(array1)
    % 统一转换为ASCII数值数组
    if isstring(array1)
        % 处理字符串数组:先转为字符数组再转ASCII
        arr = double(char(array1));
    else
        % 处理字符数组或数值数组
        arr = double(array1);
    end
    
    h = 0;
    n = length(arr);
    for i = 1:n
        h = arr(i) + 31 * h;
    end
end

代码说明

  1. 类型判断与转换:用isstring()判断输入是否为字符串数组,若是则先转成字符数组再转ASCII;字符数组和数值数组直接用double()转换即可。
  2. 循环计算哈希:基于转换后的数值数组arr进行循环,确保无论输入是数值、字符还是字符串数组,都能正确计算哈希值。
  3. 简化代码:去掉了冗余的i=1初始化,MATLAB的for循环会自动初始化循环变量。

测试示例

  • 输入数值数组:converter([1,2,3]) → 计算得哈希值1+31*(2+31*3)=2984
  • 输入字符数组:converter('abc') → 'a'=97, 'b'=98, 'c'=99,计算得97+31*(98+31*99)=98274
  • 输入字符串数组:converter(["a","b","c"]) → 转换后和字符数组效果一致,得到相同哈希值

内容的提问来源于stack exchange,提问作者ag3007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:00:53