我有整数数字(带符号),每个数字从4个字节读取,但它们应该 首先读作浮动数字......所以价值观是完全错误的。
如果我无法阅读原始文件,我如何转换它们?我只是有那些错误的整数。
我看到我的问题不明确。首先,请考虑整数的二进制格式和浮点数之间的区别。
有一个(二进制)文件,其中每4个字节都有数字。 但是第一个开发人员认为它们被存储为带符号的整数,他就像那样读取那些字节。然后他将其保存在文本文件中:
1059629445
1061956142
1062430937
1062311316
1062487958
我得到了那个文本文件但不是原始的二进制文件。我知道它们应该被读作浮点数(也是4个字节)。结果应如下所示:
0.658837
0.797519
0.825819
0.818689
0.829217
我现在知道结果,因为我在此期间得到了二进制文件,但是知道这个问题的答案会非常有用。
如何转换(这可能是错误的词 - 而不是重新解释)这些数字?
答案 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));
在大多数系统中,float
和int
的大小为4个字节。
答案 2 :(得分:1)
正如我在早期评论(现已删除)中所提到的,这种处理可以并且通常使用struct
module来完成。因此,如果您的问题中显示了包含整数的文本文件,那么这是进行转换/重新解释的一种方法:
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;