2015-03-22 3 views
2

Скажем, у меня есть следующий одинарной точностью с плавающей точкой в ​​Matlabодинарной точности с плавающей точкой, чтобы массив байтов в MATLAB

a = single(-2.345) 

Я хотел бы представить число в виде массива из 4 байтов, после IEEE 754. правильное представление должно быть

b = [123, 20, 22, 192] 

в настоящее время я использую fread и fwrite сделать преобразование, как в

fid = fopen('test.dat','wb') 
fwrite(fid,a,'float') 
fclose(fid) 

fid = fopen('test.dat','rb'); 
b = fread(fid)' 

, который достаточно хорошо, но я подозреваю, что есть намного более простой и быстрый способ сделать преобразование без чтения/записи из файла.

Было несколько сообщений о преобразовании массива байтов в поплавок (например, here), но я не уверен, как перейти в противоположную сторону. Какие-либо предложения?

ответ

4

Вы можете использовать функцию typecast для переноса между типами данных без изменения базовых данных, т. Е. Переинтерпретировать данные с использованием другого типа. В вашем случае вам нужно будет отличить от single до uint8 (byte). Это делается по

a = single(-2.345); 
typecast(a,'uint8') 
ans = 
    123 20 22 192 

по мере необходимости.

+0

Удивительно, я полагал, что у ML будет простая команда для этого. Спасибо! – adammgannon