文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Python与C数据读取与写入

Python与C数据读取与写入

时间:2007-10-21  来源:jcodeer

# -*- coding: cp936 -*-
'''使用array模块读取C语言生成的二进制数据文件,并改变字节顺序
1.C语言生成的二进制文件数据必须为同一类型。
2.先运行topython.exe程序,生成topython.dat数据文件
3.再运行此程序,这个程序先将topytho.dat中的数据一integer读入array,并以列表的方式打印出结果
4.再将此数据改变字节顺序,并写入to_big_endian.dat数据文件。
5.再运行topython.exe程序将big-endian数据打印出来(使用be2le转化后)
'''
import array
# 以二进制的方式打开数据文件
fp = file("c:\\topython.dat","rb")
data = array.array('i')
# 从文件中读入数据
data.fromfile(fp,20)
fp.close()
'''
打印数据
array('i', [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361])
'''

print data.tolist()
'''
打印生成的列表
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]
'''
# 使用python输出big-endian数据
data.byteswap()
print data
fp_be = file('c:\\to_big_endian.dat','wb')
print fp_be
print data.tofile(fp_be)
fp_be.close()

C语言代码:
生成python读取的数据;
显示python字节转化后数据;

#include <stdio.h>
#include <stdlib.h>

//将little-endian转化为big-endian

int be2le(void* pData,unsigned short i)
{
    char c;
    char* p = (char*)pData;
    c = *p;
    *(p) = *(p + 3);
    *(p + 3) = c;
    c = *(p + 1);
    *(p + 1) = *(p + 2);
    *(p + 2) = c;
    return *(int*)p;
}
int main(int argc, char* argv[])
{
    int i = 0;
    int data[20] = {0};
    //生成0-19的平方数

    for(;i < sizeof(data)/sizeof(data[0]);i++)
    {
        data[i] = i * i;
        printf("%d\t",data[i]);
    }
    {
        //将data数组中的平方数写入文件topython.dat文件

        FILE* fp = fopen("c:\\topython.dat","wb");
        fwrite(data,sizeof(int),sizeof(data)/sizeof(data[0]),fp);
        fclose(fp);
    }
    
    {
        //读取python生成的数据

        FILE* fp = fopen("c:\\to_big_endian.dat","rb");
        int data[20] = {0};
        if(fp == NULL)
        {
            return -1;
        }
        fread(data,sizeof(int),sizeof(data)/sizeof(data[0]),fp);
        for(i = 0; i < sizeof(data)/sizeof(data[0]);i++)
        {
            //打印bigendian数据文件
            //printf("%d\t",data[i]);
            //注意这里为了在windows上显示正确结果,这里使用了be2le函数

            printf("%d\t",be2le(&data[i],sizeof(int)));
        }
        fclose(fp);
    }
    return 0;
}

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载