需要一种从python

时间:2018-11-02 17:23:07

标签: python c python-3.x

我工作的公司的文件格式很旧。真的很老。我正在构建一个python库来从文件(数据库类型文件)中读取/写入文件,并且有一些问题。

最初读取/写入文件的运行时根据所讨论的结构sizeof动态地读出前XX个字节。例如:

struct fhdr {
    union {
        unsigned char ifflag[2]; /* file type and psw */
        int     fh_flag;         /* alignment to old version */
    } ufh;
    unsigned    reclen;          /* record length in bytes */
    DWORD       fsize;           /* byte size/reclen */
    struct {
        short   typ;
        short   offset;          /* in bytes */
    } fmt[MAXITMS];              /* struct for formatted file */  (65?)
};

我的问题是,我们的客户遍布各种平台。一个客户上的long是8个字节,但是旧SCO 6盒上的一个客户(他们在那里!)可能是4个字节。

现在,我有这个:

#include <stdio.h>

int main(void){
    printf("char=%d\n", sizeof(char));
    printf("int=%d\n", sizeof(int));
    printf("short=%d\n", sizeof(short));
    printf("long=%d\n", sizeof(long));
    printf("float=%d\n", sizeof(float));
    printf("double=%d\n", sizeof(double));
    printf("long double=%d\n", sizeof(long double));
    printf("DWORD=%d\n", sizeof(long));
    printf("unsigned=%d\n", sizeof(unsigned));
    return 0;
}

它只是以这种格式打印出尺寸:

char=1
int=4
short=2
long=8
float=4
double=8
long double=16
DWORD=8

,并在实例化类时对其进行解析。然后,我可以根据平台的实际变量大小构建一个数组。

我的问题是:在python 3.x中,有没有一种方法可以让我找到单个服务器的数据类型大小,还是最好还是解析上面的简单c程序?

这并不难,只是感到乏味而重复,并且觉得很不适合创建自定义函数来检索每种数据类型。

header_fields = {
    'ifflag': IMS.char() * 2,
    'fh_flag': IMS.int(),
    'reclen': IMS.unsigned(),
    'fsize': IMS.DWORD(),
    'typ': IMS.short(),
    'offset': IMS.short()
}

(是的,我知道char始终是1个字节。我喜欢均匀性。)

我的作品行之有效,而且效果很好。如果可能的话,我只是想学习如何改进它。

0 个答案:

没有答案