c - 如何在 C 语言的小端机器上比较两个 ipv6 地址

标签 c

我正在尝试比较两个 ipv6 地址,但想创建可移植的代码。我知道 ipv6 地址以网络字节顺序(大端)存储,因此在大端 CPU 上我可以简单地在两个 in6_addr 结构中使用 memcmp。但是,在小端机器上执行相同操作的最简单方法是什么?

[编辑] 当我想比较两个地址时,我想弄清楚一个地址是小于、等于还是大于另一个。我认为 memcmp 在扫描内存中的位时会依赖于字节序。

最佳答案

实际上,我认为 memcmp 可能会起作用。据我所知,没有一台具有 128 位数据类型的流行机器。我怀疑 ipv6 地址通常作为字节数组携带。鉴于网络字节顺序是大端字节序,memcmp 将按照您的意愿首先查看并比较高位字节。

你想知道机器的字节顺序是否对可移植性很重要,但在这种情况下,我认为它不重要。当我们处理从网络复制的 16 位或 32 位整数时,字节序很重要,并且我们希望将它们作为整数来处理。但在这里,只有一个字节数组,这个问题不存在。

我通常不会这么说——我通常喜欢先确定自己在做什么——但是,试试看吧!

关于c - 如何在 C 语言的小端机器上比较两个 ipv6 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30927315/

相关文章:

c++ - 数组中的位移位并将分数写入另一个数组

sql - 动态 SQL - 从 C 程序打印 DATE

创建一个进程并告诉它 sleep ?

c中的消费者生产者问题

c - 关于 "Advanced Programming in the Unix Environment"这部分

c++ - 如何从 GetLastError() 返回的错误码中获取错误信息?

c - 删除叶节点 BST

C 错误 SQL 指针

c - 在 C 中返回反转字符串的函数 - 分配

c - 问)在这个程序中,sizeof [arr]给出的是数组基地址的地址还是arr的大小?