【问题标题】:How does one convert from char format to double format, when working with binary numbers?在处理二进制数时,如何从 char 格式转换为 double 格式?
【发布时间】:2013-01-11 23:22:25
【问题描述】:

我有一段代码输出我想要的但格式错误

for k=1:100
    bin(k,:)=dec2bin(randi([0 31]),5);
end

我希望输出为 100x5 双精度数组,每个单元格有一位(0 或 1 个值)。

我尝试过使用double() 函数...

for k=1:100
    bin(k,:)=double(dec2bin(randi([0 31]),5));
end

...但返回的格式正确,但值错误。

我的行话可能有点离题,抱歉(我是否在错误的上下文中使用了单元格、双精度等?)

谢谢你帮助我。

【问题讨论】:

    标签: matlab binary char format double


    【解决方案1】:

    有很多方法可以做你想做的事。最简单的实际上是从一开始就生成二进制数组,没有循环:

    bin = rand(100, 5) > 0.5
    

    其他选择:

    1. 如果你有一个整数数组并且你想将它转换为位,你可以在循环中使用bitget而不是dec2bin

      bin(k, :) = bitget(randi([0 31]), 5:-1:1)
      
    2. 如果你已经有一个表示二进制数的字符串数组,并且你想对它进行操作,你可以用空格分隔位,然后应用str2num

      bin = reshape(str2num(sprintf('%c ', bin)), size(bin))
      

    【讨论】:

    • 在您进行编辑之前,我已经听从了您的建议,这是一个很好的解决方案。由于您的编辑,更好!我将听从您的建议,从一开始就生成二进制数组。
    • 要获得完整的答案,我将添加如何将使用 'bin = rand(100, 5) > 0.5' 获得的逻辑数组输出转换为双精度数组。我发现你可以包含'bin = +bin',它具有删除数组逻辑标志的效果。
    • 是的,但通常逻辑数组在算术运算中无论如何都会隐式转换为 double。此外,为什么要将位存储为双精度数?这似乎是在浪费内存。
    • 后来我尝试操作数组,但遇到了困难。我认为这是由于逻辑格式。不过,它一定是其他错误,因为它现在正在工作!所以是的,如果它可以以与其对应的双重格式相同的方式运行,那么你的答案是 100% 完整和正确的 :)
    猜你喜欢
    • 2014-05-05
    • 2020-01-04
    • 1970-01-01
    • 2011-08-12
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    相关资源
    最近更新 更多