按位运算符:如何检查源端口是否大于 32767 (0x7FFF)

Bitwise operators: How to check if source port is great than 32767 (0x7FFF)

我有一个程序可以读取一个 20 字节的二进制文件,修改数据然后写入另一个二进制文件。我正在尝试检查源端口是否大于 32767 或 (0x7FFF)。 如果它更大,那么我必须将它的最高有效两位归零。我只被允许使用按位运算符。任何人都知道我该怎么做?谢谢

Data: 32 27 A9 49 03 8C BD 89 01 87 9B 8D 50 13 00 00 FF FF 00 00
Source port: 32 27 (16 bits)

void modify(const unsigned char oldData [], unsigned char newData []){

/*Accessing the souce port oldData[0] and oldData[1].*/


}

从数据中挑出端口值即可。这取决于字节顺序。小或大。

您需要了解数据的组织方式 - 32 是高位还是低位。

假设你的数据是小端的,你可以这样读:

#include <endian.h>

void modify()
{
    uint16_t port = le16toh( *((uint16_t*)oldData) );
    if(port>32767)
        {/*whatever*/}

对于检查 >=32768 的特殊情况,即 >=0x8000,可以像已经评论的那样测试高位:

if(oldData[1]&0x80) // [1] is highbyte if using little-endian data.
    {/*whatever*/}