python - c++枚举类型保存为二进制文件,占多少个二进制位?

查看:102
本文介绍了python - c++枚举类型保存为二进制文件,占多少个二进制位?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

现在用python来解析一个二进制文件,用structs模块的unpack方法可以实现
比如有这么一个二进制文件,里面存放的是这个结构体,结构体应该是C++在64位linux下写进去的

struct Dot_Candle
{
double high_;//
double low_;//
int64_t open_time_;//
double turnover_;//
};

用python语句解析上面这个结构体:data=unpack(ddqd,bindle.read(8+8+8+8)), 可以解析出来

但是另外一个二进制文件,结构体中有如下这个枚举类型后,用unpack来解析总是解析出来一些很夸张的数字(e的很多次方),明显不对,我用unpackenum试过2个字节,4个字节,8个字节,都不行

enum Genera {
INDEX = 0,
BOND = 1,
FUND = 2,
FUTURE = 3,
OPTION = 4,
WARRANT_ = 5,
STOCK = 6,
ETF = 7
}; //定义枚举类型

struct DotQuote 一个结构体,存在二进制文件中
{
Genera type_; //就是这个枚举对象,我想用python把这个结构体从二进制文件中解析出来
...
...
}

解决方案

Unscoped enum 的默认类型是 int,在你的平台上 int 占几位这个 enum 就占几位。

随便写了个程序测了一下:

cholerae@Lenovo-PC:~$ cat test.cc
#include <stdio.h>
enum Genera {
INDEX = 0,
BOND = 1,
FUND = 2,
FUTURE = 3,
OPTION = 4,
WARRANT_ = 5,
STOCK = 6,
ETF = 7
};

int main() {
        printf("%lu %lu\n", sizeof(Genera), sizeof(int));
        return 0;
}
cholerae@Lenovo-PC:~$ ./a.out
4 4

这不是一样么,我的系统是64位的。

这篇关于python - c++枚举类型保存为二进制文件,占多少个二进制位?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆