如何在matlab中保存二进制数据并进行十六进制转换

如何在matlab中保存二进制数据并进行十六进制转换,matlab,hex,binary-data,Matlab,Hex,Binary Data,例如,我想在matlab的变量中保存一些二进制数据 11110001 以后我想把它转换成十六进制 F1 我无法确定如何在变量中保存二进制数据,是否有函数执行该转换您可以使用类似的方法,假设a作为输入二进制行向量- %// Pad zeros to make number of binary bits in input as multiple of 4 a = [zeros(1,4-mod(numel(a)-1,4)-1) a]; %// Convert to string, then to b

例如,我想在matlab的变量中保存一些二进制数据

11110001

以后我想把它转换成十六进制

F1


我无法确定如何在变量中保存二进制数据,是否有函数执行该转换

您可以使用类似的方法,假设
a
作为输入二进制行向量-

%// Pad zeros to make number of binary bits in input as multiple of 4
a = [zeros(1,4-mod(numel(a)-1,4)-1) a];

%// Convert to string, then to binary and finally to hex number as a char array
out = dec2hex(bin2dec(num2str(reshape(a,4,[])','%1d')))'
请注意,对于输入向量中二进制元素的数量,没有限制。因此,作为一个随机
1x91
大小的输入二进制数据,输出是-

out =
02678E51063A7FFBD9CE1DF6A3DC63B17F71C39C17DC499AD58516D7B571FC58DF05957F7

您的案例中有MATLAB内置函数:但是,
binaryvectorohex()
需要数据采集工具箱

试试这个:

>> vec    = randi(2, 1, 100) - 1;      %// Double type vector
>> vecBin = logical(vec);              %// Binary conversion
>> vecHex = binaryVectorToHex(vecBin); %// Hexadecimal conversion

一种可能更快的方法,利用正好四个二进制数字组成一个十六进制数字的事实:

x = [zeros(1,4-mod(numel(x)-1,4)-1) x]; %// make length a multiple of 4
k = 2.^(3:-1:0); %// used for converting each group of 4 bits into a number
m = '0123456789ABCDEF'; %// map from those numbers to hex digits
result = m(k*reshape(x,4,[])+1); %// convert each 4 bits into a number and apply map

如果我只想在单个计算机上执行此操作vector@User1551892然后直接使用
a
use,其中
a
将是您的单个向量。现在,这种方法适用于更长的向量。我已经检查了100个长度向量a,并给出了与
binaryVectorToHex()相同的结果。仅供参考。@mehmet完全正确!我也做了同样的检查!希望mathworks的人现在不要起诉我们;)为了帮助我,非常感谢你们两位。祝你玩得愉快。我没有数据采集工具包。因此,我无法访问方法binaryVectorHex methodNo保留它。因为它可以帮助一些人。实际上看起来像是一个有用的函数!谢谢你们两位。因为同样的问题,我忘了还有一位客人。