Matlab数据类型规范

时间:2015-10-17 11:26:07

标签: matlab types casting

我在MATLAB中遇到数据类型问题。它是将二进制转换为十进制的简单代码。对于我的进一步任务,那些应该是整数64位。我该怎么做?

此代码将这些值转换为double。并且,铸造没有帮助;例如,对于第一个值,sum为4.0265e+09但是在通过Y = typecast(sum, 'int64');投射后,它会生成4750734656922451968,这不是正确的值。

example.png

enter image description here

I = imread('example.png');
level = graythresh(I);
img = im2bw(I,level);

sz=size(img);
for i=1:sz(1)
    sum=0;
    p=1;
    for j=sz(2):-1:1
        sum=sum+img(i,j)*p;
        p=p*2;
    end
    disp(sum);
end

1 个答案:

答案 0 :(得分:4)

您应该使用cast代替typecast

>> s = 4.0265e+09;
>> cast(s, 'int64')
ans =
    4026500000

typecast转换数据而不更改基础byte值,而cast转换数据并尝试保持相同的值。您发现的typecast可以更改数据的值,因为它不会更改基础byte值。 typecast只是更改MATLAB用于解释基础type值的byte

或者您只需使用int64

即可
>> int64(s)
ans =
    4026500000

在尝试保持相同值时转换数据。

旁白: sum是一个内置的MATLAB函数。不建议您调用变量sum,因为您将覆盖内置的MATLAB函数。