是否可以在 Cython 中声明和定义位域?
Is it possible to declare and define a bit field in Cython?
在 C/C++ 中,您可以通过指定用于结构中给定字段的位数来将 bit field 声明为结构。例如:
typedef struct {
char threeBits : 3;
char fiveBits : 5;
} MyBitField;
如果我们询问它的大小,我们得到 1:
printf("sizeof(MyBitField): %d\n", sizeof(MyBitField)); // prints: "sizeof(MyBitField): 1"
是否可以在 Cython 中定义这些特殊类型的结构?
我查看了 docs 并没有看到任何语法来支持它。
仍然希望得到更好的答案,但在紧要关头,你总是可以cheat
cdef extern from *:
"""
struct MyBitField {
char threeBits : 3;
char fiveBits : 5;
};
"""
cdef struct MyBitField:
char threeBits
char fiveBits
cdef MyBitField mbf = MyBitField(2,3)
print(mbf)
print(sizeof(mbf))
打印:
{'threeBits': 2, 'fiveBits': 3}
1
在 C/C++ 中,您可以通过指定用于结构中给定字段的位数来将 bit field 声明为结构。例如:
typedef struct {
char threeBits : 3;
char fiveBits : 5;
} MyBitField;
如果我们询问它的大小,我们得到 1:
printf("sizeof(MyBitField): %d\n", sizeof(MyBitField)); // prints: "sizeof(MyBitField): 1"
是否可以在 Cython 中定义这些特殊类型的结构?
我查看了 docs 并没有看到任何语法来支持它。
仍然希望得到更好的答案,但在紧要关头,你总是可以cheat
cdef extern from *:
"""
struct MyBitField {
char threeBits : 3;
char fiveBits : 5;
};
"""
cdef struct MyBitField:
char threeBits
char fiveBits
cdef MyBitField mbf = MyBitField(2,3)
print(mbf)
print(sizeof(mbf))
打印:
{'threeBits': 2, 'fiveBits': 3}
1