读取后的整数到浮点转换

时间:2014-07-06 11:56:32

标签: python c

我有整数数字(带符号),每个数字从4个字节读取,但它们应该 首先读作浮动数字......所以价值观是完全错误的。

如果我无法阅读原始文件,我如何转换它们?我只是有那些错误的整数。

详细

我看到我的问题不明确。首先,请考虑整数的二进制格式和浮点数之间的区别。

有一个(二进制)文件,其中每4个字节都有数字。 但是第一个开发人员认为它们被存储为带符号的整数,他就像那样读取那些字节。然后他将其保存在文本文件中:

1059629445
1061956142
1062430937
1062311316
1062487958

我得到了那个文本文件但不是原始的二进制文件。我知道它们应该被读作浮点数(也是4个字节)。结果应如下所示:

0.658837
0.797519
0.825819
0.818689
0.829217

我现在知道结果,因为我在此期间得到了二进制文件,但是知道这个问题的答案会非常有用。

如何转换(这可能是错误的词 - 而不是重新解释)这些数字?

5 个答案:

答案 0 :(得分:1)

假设sizeof(int) == sizeof(float)

float res;
int value;
... 
memcpy(&res, &value, sizeof(res));

答案 1 :(得分:1)

以下逻辑将帮助您

int a;
void *v;
fscanf(fp, "%d", &a);
v = &a;
fprintf(fp, "%f", *((float*)v));

在大多数系统中,floatint的大小为4个字节。

答案 2 :(得分:1)

正如我在早期评论(现已删除)中所提到的,这种处理可以并且通常使用structmodule来完成。因此,如果您的问题中显示了包含整数的文本文件,那么这是进行转换/重新解释的一种方法:

import struct

# convert integer on each line of text file into a list of Python int objects
with open('ints.txt') as ints_file:
    ints = [int(line) for line in ints_file]

# convert list of ints into list of 4-byte binary strings
binaries = [struct.pack('i', i) for i in ints]

# convert list of 4-byte binary strings into list of Python floating point values
floats = [struct.unpack('f', b)[0] for b in binaries]  # unpack() returns a tuple

print 'input:'
for value in ints:
    print '  {:d}'.format(value)
print
print 'results:'
for value in floats:
    print '  {:.5f}'.format(value)

输出:

input:
  1059629445
  1061956142
  1062430937
  1062311316
  1062487958

results:
  0.65884
  0.79752
  0.82582
  0.81869
  0.82922

这可以进行优化和缩短,在这种情况下,实际上可能会更容易看到应用的3个转换步骤,一个接一个:int()struct.pack()struct.unpack()

with open('ints.txt') as ints_file:
    print 'results:'
    for line in ints_file:
        print '  %.5f' % struct.unpack('f', struct.pack('i', int(line)))[0]

答案 3 :(得分:0)

你的问题不明确。我想这可能会对你有帮助......

int i=5;
printf("in float the value is=%f",(float)i);

输出将处于浮动状态。

答案 4 :(得分:0)

如果执行从int到float的类型转换,它将为您提供所需的结果。

int myIntNum = 100;
float myFloatNum = (float)myIntNum;