将十进制转换为二进制向量

Posted

技术标签:

【中文标题】将十进制转换为二进制向量【英文标题】:Convert Decimal to Binary Vector 【发布时间】:2011-08-10 07:35:45 【问题描述】:

我需要将十进制数转换为二进制向量

例如,这样的事情:

  length=de2bi(length_field,16);

不幸的是,由于许可,我无法使用此命令。是否有任何快速将二进制转换为向量的简短技术。

这就是我要找的,

If 
Data=12;
Bin_Vec=Binary_To_Vector(Data,6) should return me
Bin_Vec=[0 0 1 1 0 0]

谢谢

【问题讨论】:

Decimal to binary as double type array, not string的可能重复 【参考方案1】:

您提到无法使用函数de2bi,这可能是因为它是Communications System Toolbox 中的一个函数,而您没有它的许可证。幸运的是,您可以使用其他两个函数,它们是核心 MATLAB 工具箱的一部分:BITGET 和 DEC2BIN。从DEC2BIN can be significantly slower when converting many values at once 开始,我通常倾向于使用 BITGET。以下是您将如何使用 BITGET:

>> Data = 12;                  %# A decimal number
>> Bin_Vec = bitget(Data,1:6)  %# Get the values for bits 1 through 6

Bin_Vec =

     0     0     1     1     0     0

【讨论】:

哦,太好了! +1 非常了解 Matlab :)。请注意,我认为作者不能使用dec2bin 并且只是输入错误。我什至不知道de2bi 确实存在。 +1 简单易用!但是,请注意,许多人会想致电fliplr(bitget(Data,1:6)) 以获取“正确”顺序的数字。当然取决于使用情况(:【参考方案2】:

单次调用 Matlab 的内置函数dec2bin 即可实现:

binVec = dec2bin(data, nBits)-'0'

【讨论】:

非常感谢,我不知道 dec2bin 可以用来获取这样的二进制向量。【参考方案3】:

这是一个相当快的解决方案:

function out = binary2vector(data,nBits)

powOf2 = 2.^[0:nBits-1];

%# do a tiny bit of error-checking
if data > sum(powOf2)
   error('not enough bits to represent the data')
end

out = false(1,nBits);

ct = nBits;

while data>0
if data >= powOf2(ct)
data = data-powOf2(ct);
out(ct) = true;
end
ct = ct - 1;
end

使用方法:

out = binary2vector(12,6)
out =
     0     0     1     1     0     0

out = binary2vector(22,6)
out =
     0     1     1     0     1     0

【讨论】:

非常感谢您的宝贵时间和及时的帮助。 @kirancshet:不客气。我添加了一些输入测试以避免无限循环。【参考方案4】:

您是否将其用于 IEEE 802.11 信号字段?我注意到“length_field”和“16”。 无论如何,这就是我的做法。

    function [Ibase2]= Convert10to2(Ibase10,n)

    % Convert the integral part by successive divisions by 2
    Ibase2=[];


    if (Ibase10~=0)

    while (Ibase10>0)

    q=fix(Ibase10/2);
    r=Ibase10-2*q;
    Ibase2=[r Ibase2];
    Ibase10=q;
    end


    else
    Ibase2=0;
    end

    o = length(Ibase2);
    % append redundant zeros
    Ibase2 = [zeros(1,n-o) Ibase2];

【讨论】:

以上是关于将十进制转换为二进制向量的主要内容,如果未能解决你的问题,请参考以下文章

将向量从二进制强制转换为“as.numeric”时保留名称?

如何将两列“计数”矩阵转换为 R 中的二进制向量? [复制]

在R中将字符串转换为二进制向量

将十六进制数转换为十进制数

将十进制转换为 ASCII

将整数向量打印为十进制数