gpt4 book ai didi

c - 'memcpy'(合并两个结构)

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:14 24 4
gpt4 key购买 nike

考虑以下片段:

#define IPV4_MAX_BYTELEN  4
struct gen_entry
{
struct in_addr addr;
struct in_addr mask;
..
};
unsigned char key[40];

memcpy (key, &fec->addr, IPV4_MAX_BYTELEN);
memcpy (key + IPV4_MAX_BYTELEN, &fec->mask, IPV4_MAX_BYTELEN);
..

我想要的是将 IP 地址和掩码合并到一个二进制 key 中。这样合并可以吗,前提是数组大小足够这个目的? (或者我遗漏了什么?)

谢谢!

最佳答案

这通常被称为“连接”而不是“合并”。

为了可移植性,您可以显式使用 struct in_addrs_addr 字段,而不是假设它是第一件事。虽然这可能是由 Posix 保证的,但我不确定。我认为 Posix 还保证 IPv4 地址的 sizeof 是 4 个字节,所以你没问题。

您的代码没有清除数组的其他 32 个字节,因此它不能(目前)以任何有用的方式用作键。除非 key 是在文件范围内定义的,在这种情况下它被初始化为零。

除了那些小问题之外,我看不出您所做的有任何问题。

作为假设的可移植性问题——即使 struct in_addrs_addr 字段之前没有填充 bytes,如果有填充 < em>bits 在理论上你可以得到假阴性。假设您从不同的来源构造两个具有相同值但不同填充位的 key ——那么它们应该产生相同的 key ,但实际上却没有。不过,我不会为此担心:任何奇怪到足以在整数类型中填充位的实现都可能太奇怪而无法提供 Posix 网络 API。

关于c - 'memcpy'(合并两个结构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10109243/

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