从C代码读取文件时的文件读取行为

时间:2017-02-09 09:46:15

标签: python c++ file-io

我正在尝试执行一个简单的代码来读取一个文件,其中数据是从python脚本编写为int32类型

insertReactSubview()

阅读它的c程序如下:

# array_values is a numpy array
array_values.astype('int32').tofile(filename + '.dat')

上面的代码给出了以下结果:

#include <iostream>
#include <fstream>
typedef unsigned uint32_t;
int main()
{
         char* filename;
         FILE* f;
         uint32_t number;
         filename = "datfile.dat";
         f = fopen(filename, "rb");
         if (f == NULL){
                 printf("File NULL");
         }
         //fseek(f, SEEK_SET, 0);

         for (int i = 0; i < 10; i++){
                 fread(&number, 4, 1, f);
                 printf("%d   %08x \n", i, number);
         }


    return 0;
}

如果我将其更改为2字节

0   01040000
1   00260e7d
2   0375016c
3   07caf50c
4   0dd90464
5   f8e2f9ea
6   076d0527
7   00c61143
8   113af1de
9   fbb5038b

它提供以下输出:(并且它是预期的和正确的)

fread(&number, 2, 1, f);

我无法理解为什么int32在读取4个字节时没有给出正确的结果。

编辑:

使用numpy.swapbytes(True)在将数据保存到文件之前在大端和小端之间切换并且输出更加混乱之后的输出

0   00000000
1   00000104
2   00000e7d
3   00000026
4   0000016c
5   00000375
6   0000f50c
7   000007ca
8   00000464
9   00000dd9

0 个答案:

没有答案