我想知道如何在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)
})
}
答案 0 :(得分:0)
要知道c中结构成员的字节位置,请使用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;
}