gpt4 book ai didi

c - 位运算符解释

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:23 25 4
gpt4 key购买 nike

我在网上找到了这段代码,它作为我项目的一部分工作,但我不确定为什么。我不想在不了解它的作用的情况下就使用它。

type = (packet_data[12] << 8) | packet_data[13];

如果我使用它,我会得到正确的类型(IPv4 为 0x0800),并且可以使用它来比较打印输出是 IPv4 还是 IPv6。如果我不使用它并尝试类似的方法:

if(packet_data[12] == 08 && packet_data[13] == 00)
print out IPv4

它不起作用(编译错误)。

另外,如果我只是打印出像这样的值

printf"%02X", packet_data[12];
printf"%02X", packet_data[13];

它以 0800 的形式打印出正确的值,但我需要打印出它是 IPv4 类型。这就是为什么我首先需要比较的原因。感谢您就此功能提供任何建议或解释,我们将不胜感激。谢谢

最佳答案

if(packet_data[12] == 08 && packet_data[13] == 00)

正确的文字操作数被编译器视为八进制基本文字。

幸运的是,8 不能表示八进制数,因此您遇到了编译错误。

你的意思是十六进制文字:

if (packet_data[12] == 0x8 && packet_data[13] == 0x0)

这一行:

(packet_data[12] << 8) | packet_data[13]

重新创建位于偏移量 12 和 13 处的数据的大端值(网络约定)。两者在您的情况下是等效的,尽管后者更便于将值作为一个整体进行比较。

关于c - 位运算符解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47490655/

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