我有一个来自乐器的ASCII读数:
read4 = '..V3..V3..V3..V3..V3..V3..V3..V3..V3..V3,.V36.V3..V3z.V3..V36.V3'
我需要在Matlab中将此读数转换为浮点数。 'read'中的每4个字节代表一个浮点值。 如何在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 :(得分: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