我工作的公司的文件格式很旧。真的很老。我正在构建一个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个字节。我喜欢均匀性。)
我的作品行之有效,而且效果很好。如果可能的话,我只是想学习如何改进它。