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

时间:2017-08-14 07:41:29

标签: c# c c#-4.0 c#-3.0

我想知道如何在C语言中获取结构的偏移值 我正在将结构转换为c#。例如。如果log_level_offset的偏移值为0,则类似于下一个和其余属性的偏移值。

我的结构示例:

func ShowSearchController() {

    let secondViewController:SearchController = SearchController()
    let navController = UINavigationController.init(rootViewController: secondViewController)
    self.navigationController?.addChildViewController(navController)

    secondViewController.navigationController?.view.frame = (self.navigationController?.view.frame)!
    secondViewController.view.frame = (self.navigationController?.view.frame)!
    self.navigationController?.view.addSubview(secondViewController.view)
    secondViewController.beginAppearanceTransition(true, animated: true)

    UIView.animate(withDuration: 0.2, animations: {
    }, completion: {
      (value: Bool) in
      secondViewController.endAppearanceTransition()
      secondViewController.didMove(toParentViewController: self)
    })

  }

2 个答案:

答案 0 :(得分:0)

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

#include <stddef.h>

printf("%zu", offsetof(struct TestStruct, log_level_offset));

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

请注意,这会占用潜在的填充字节,因此一个系统上的偏移量不一定与另一个系统上的偏移量相同。

答案 1 :(得分:-3)

指针在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;
        }