将十进制转换为二进制向量
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”时保留名称?