代码之家  ›  专栏  ›  技术社区  ›  IPS

如何知道类型结构属性的偏移值?

  •  -1
  • IPS  · 技术社区  · 7 年前

    我把这个结构转换成c。例如,如果log\u level\u offset的偏移值为0,则类似的方法是,属性的下一个和其余部分的偏移值是多少。

    typedef struct TestStruct
    {
        const AVClass *av_class;
        int log_level_offset;
        enum AVMediaType codec_type;
        const struct AVCodec  *codec;
        void *priv_data;
        int bit_rate_tolerance;
        uint8_t *extradata;
        int extradata_size;
        float b_quant_factor;
        uint16_t *intra_matrix;
        uint64_t channel_layout;
    } TestStruct;
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   Lundin    7 年前

    要知道结构成员在中的字节位置 ,使用 offsetof 来自stddef.h的宏:

    #include <stddef.h>
    
    printf("%zu", offsetof(struct TestStruct, log_level_offset));
    

    %zu 因为宏返回类型为的整数 size_t

    注意,这需要考虑潜在的填充字节,因此一个系统上的偏移量不一定与另一个系统上的相同。

        2
  •  -3
  •   jdweng    7 年前

    指针在c#中为4字节,通常定义为IntPtr。整数和浮点为4字节。uint8是8个字节。见以下结构

            [StructLayout(LayoutKind.Sequential)]
            public struct TestStruct
            {
                IntPtr av_class;
                int log_level_offset;
                int codec_type;       //may be different depending on size of c language code
                IntPtr  codec;
                IntPtr priv_data;
                int bit_rate_tolerance;
                IntPtr extradata;
                int extradata_size;
                float b_quant_factor;
                IntPtr intra_matrix;
                ulong channel_layout;
            }