gpt4 book ai didi

c++ - c 到 delphi 的结构转换

转载 作者:行者123 更新时间:2023-11-28 08:25:37 25 4
gpt4 key购买 nike

有人能告诉我从 c 到 delphi 的对话是否顺利:

代码

struct nfq_data {
/* packet_hdr - it HAVE to be the same as struct nfqnl_msg_packet_hdr */
struct {
uint32_t packet_id; /* unique ID of packet in queue in network order */
uint16_t hw_protocol; /* hw protocol in network order */
uint8_t hook; /* netfilter hook */
} packet_hdr;
/* packet_hw - it HAVE to be the same as struct nfqnl_msg_packet_hw */
struct {
uint16_t hw_addrlen; /* len of hw_addr in network order */
uint16_t _pad;
uint8_t hw_addr[8];
} packet_hw;
/* tm */
struct {
long sec;
long usec;
} tm;

uint32_t if_index; /* Unique iface id */
uint32_t verdict; /* Netfilter verdict value */
uint32_t mark; /* Mark value */
uint8_t if_name[IFNAMSIZE]; /* Name of incoming or outgoing iface */
uint32_t data_len; /* Length of packet */
uint8_t payload[0]; /* packet data */
};

在哪里

typedef unsigned char uint8_t;
typedef unsigned __int16 uint16_t;
typedef unsigned __int32 uint32_t;
typedef unsigned __int64 uint64_t;

德尔福

_packet_hdr = record
packet_id: Cardinal;
hw_protocol: Word;
hook: Byte;
end;

_packet_hw = record
hw_addrlen: Word;
_pad: Word;
hw_addr: array[0..7] of byte;
end;

_tm = record
sec: Int64;
usec: Int64;
end;

pnfq_data = ^nfq_data;
nfq_data = record
packet_hdr: _packet_hdr;
packet_hw: _packet_hw;
tm: _tm;
if_index: Cardinal;
verdict: Cardinal;
mark: Cardinal;
if_name: array[0..254] of Byte;
data_len: Cardinal;
payload: PChar; //TBytes;
end;

packet_hdr: _packet_hdr;
packet_hw: _packet_hw;

我收到的很好,但在那之后就没什么好。

提前致谢

博扬

最佳答案

uint8_t payload[0];

这真的是一个指针(如在您的 delphi 代码中)还是一个大小为 0 的就地数组,用于表示 header 之后的数据

并且您应该将您的记录标记为packed我认为这不会对您的特定代码产生影响,但这是一种很好的做法,因为打包规则很容易出错,可能会发生变化,而且并不是每个人都知道。
这可能有所不同,因为 packet_hdr 在打包时大了 7 个字节,因此以下 packet_hw 在打包时从偏移量 7 开始,对齐时可能在 8 处。

关于c++ - c 到 delphi 的结构转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4171702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com