我想你需要
m = reshape(dec2bin(typecast(b(:),'uint8'),8).',1,[]);
注意,此读取Matlab的标准矩阵,column-major订单(下降,然后在)。
然后你就可以转换回来
b_recovered = reshape(typecast(uint8(bin2dec(reshape(m,8,[]).')),'double'),size(b));
由于typecast
转换数据类型在不改变基础数据,这个过程需要不会损失精度。例如,
>> b = randn(2,3)
b =
-0.241247174335006 0.540703471823211 0.526269662140438
0.908207564087271 -0.507829312416083 -1.067884765919437
>> m = reshape(dec2bin(typecast(b(:),'uint8'),8).',1,[])
m =
101100101011100000000010111110100010111111100001110011101011111101001010100000100011011101001111000010010001000011101101001111110010100100001111000010100101111001110001010011011110000100111111001011101101111100011000010000100010001101000000111000001011111100010010101001010111100001111001001100111101011111100000001111110101110001010100000110000101011000001110000101101111000110111111
>> b_recovered = reshape(typecast(uint8(bin2dec(reshape(m,8,[]).')),'double'),size(b))
b_recovered =
-0.241247174335006 0.540703471823211 0.526269662140438
0.908207564087271 -0.507829312416083 -1.067884765919437
>> b==b_recovered
ans =
2×3 logical array
1 1 1
1 1 1
>>
我想你需要'米=重塑(DEC2BIN(类型转换(二(:), 'UINT8'),8)。',1,[])',然后用'重塑转换回(如果从此注释中粘贴,请注意可能不需要的零宽度字符最后一个逗号) –
@LuisMendo感谢您的回答。但有错误'输入字符在MATLAB语句或表达式中无效'。 – Hanna
正如我在之前的评论中所述,某些不需要的零宽度字符以某种方式蠕变。我已经发布了它作为答案,这可以避免那 –