我有一些数据被存储为Nx32
逻辑数组。每行代表我发送的UDP数据的一个字。我将其存储为逻辑数组,因为我可以访问任何单词,单词的一部分甚至跨单词边界。(即,我可能会存储uint32
为[array(1, 17:32) array(2, 1:16)]
。目前,我可以根据输入字的位置,LSB和MSB找到用户想要的数据。
我要写入类以从数据中的某些地方读取/写入的功能本质上要求我将任何给定的MATLAB数值类型或char转换为其二进制形式,然后将二进制形式存储到逻辑数组中,反之亦然。基本上有很多num2hex
其他转换。(实际上,我尝试使用某种方法将浮点数转换为二进制,dec2bin(hex2dec(num2hex(pi)))
但输出不正确!)。
在C语言中,union
可以轻松地在数据类型之间进行强制转换。我可以写一个int
,然后float
直接将其读出。在MATLAB中可以使用此功能吗?如果有帮助,我确实可以访问所有工具箱。
我不熟悉与Matlab中的联合概念直接匹配的任何事物,但是有可能获得相同的结果(使用更多的内存)。我相信您正在寻找typecast
,例如
x = uint32([1 2 3]);
y = typecast(x,'single')
如果需要更改有效位的顺序,请使用swapbytes
。
编辑:如果您想处理逻辑,那么您将不得不使用二进制字符串作为中间步骤。我认为dec2bin
应该没问题(就我所知,无需将其设置为十六进制),也许您的问题是您没有提供表示要写入多少位的可选第二个参数?
x = dec2bin(22,32)
您可以转换为逻辑并翻转字节
y = x=='1';
y = fliplr(y);
您也可以在Matlab中研究使用Java,例如,将其用于双打:
x = java.lang.Double.doubleToLongBits(22);
y = java.lang.Long.toBinaryString(x)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句