我需要一个十进制数转换为二进制矢量转换十进制转换为二进制矢量
例如,事情是这样的:
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]
感谢
我需要一个十进制数转换为二进制矢量转换十进制转换为二进制矢量
例如,事情是这样的:
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]
感谢
这里有一个解决方案,就是相当快:
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
你提及不是一个可以使用功能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'确实存在。 – Jonas 2011-04-21 15:32:23
+1简单易用!但是,请注意,许多人会想要调用'fliplr(bitget(Data,1:6))'来获取'正确'顺序的数字。取决于课程的使用(: – chessofnerd 2015-06-12 15:19:22
一个调用Matlab的内置功能dec2bin
可以实现这一点:
binVec = dec2bin(data, nBits)-'0'
非常感谢,我不知道dec2bin可以用来得到这样的二进制向量。 – Kiran 2011-04-26 10:28:26
您是否使用此为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];
非常感谢您的宝贵时间和及时的帮助。 – Kiran 2011-04-21 13:28:08
@kirancshet:不客气。我添加了一点输入测试以避免无限循环。 – Jonas 2011-04-21 13:44:42