2013-06-11 2 views
0

У меня есть ASCII чтения из инструмента:Matlab: ASCII с плавающей точкой

read4 = '..V3..V3..V3..V3..V3..V3..V3..V3..V3..V3,.V36.V3..V3z.V3..V36.V3' 

Мне нужно преобразовать в Matlab, это чтение в формате числа с плавающей точкой. Каждые 4 байта из «read» представляют значение с плавающей запятой. Как сделать это преобразование в Matlab?

В C++ можно использовать Printf:

FILE *inf = fopen("input.txt", "rb"); 
int i = 0; 
float f; 
while (fread(&f, sizeof(f), 1, inf) == 1) { 
    printf("%s\t", f); 
    printf("%d %e\n", i++,f); 

} 

И я получаю следующий результат:

..V3..V3..V3..V3..V3..V3..V3..V3..V3,.V36.V3..V3z.V3..V36.V3 0 4.986776e-08 
..V3..V3..V3..V3..V3..V3..V3..V3,.V36.V3..V3z.V3..V36.V3 1 4.986776e-08 
..V3..V3..V3..V3..V3..V3..V3,.V36.V3..V3z.V3..V36.V3 2 4.986776e-08 
..V3..V3..V3..V3..V3..V3,.V36.V3..V3z.V3..V36.V3 3 4.986776e-08 
..V3..V3..V3..V3..V3,.V36.V3..V3z.V3..V36.V3 4 4.986776e-08 
..V3..V3..V3..V3,.V36.V3..V3z.V3..V36.V3 5 4.986776e-08 
..V3..V3..V3,.V36.V3..V3z.V3..V36.V3 6 4.986776e-08 
..V3..V3,.V36.V3..V3z.V3..V36.V3 7 4.986776e-08 
..V3,.V36.V3..V3z.V3..V36.V3 8 4.986776e-08 
,.V36.V3..V3z.V3..V36.V3 9 4.986776e-08 
6.V3..V3z.V3..V36.V3 10 4.986775e-08 
..V3z.V3..V36.V3 11 4.986779e-08 
z.V3..V36.V3 12 4.986776e-08 
..V36.V3 13 4.986803e-08 
6.V3 14 4.986776e-08 
    15 4.986779e-08 

У меня имеется также 15 бит точности двойной номер, который должен быть преобразован, используя 8 байт от ASCII:

read8 = '...G\.j>%bc.q.j>.&....j>...T1.j>c.'...j>...G\.j>c.'...j>c.'...j>......j>pn]{..j>..?...j>..E.F.jpn]{..j>.zW5..j>..!.Z.j>..E.F.j>UD.:..j>..E.F.j>......j>UD.:..j>.&....j>..!.Z.j>UD.:..j>......j>.zW5.j>..E.F.j>pn]{..j>......j>...G\.j>..!.Z.j>...T1.j>...G\.j>.' 

Спасибо!

+0

почему вы получите такое же число с плавающей точкой для ' '..V3'','', .V6'', ' 'z.V3'' и'' 6. V3''? – Shai

+0

Здравствуйте. Мои данные представляют значения периода в диапазоне 50 нс. Первые чтения, read4, имеют точность в 6 цифр, формат float. Отсюда я использовал код C++ для преобразования его в float - 4 байта. У меня есть данные с точностью до 16 бит, см. Read8. Здесь у меня должно быть более высокое изменение плавающего числа. – uhnucross

ответ

0

попробуйте использовать typecast

>> typecast(int8(read4), 'single') 
ans = 
1.0e-007 * 
0.4987 0.4987 0.4987 0.4987 0.4987 0.4987 0.4987 0.4987 0.4987 0.4987 0.4987 0.4987 0.4987 0.4987 0.4987 0.4987 
Смежные вопросы