我有这个问题。我有一个可以动态改变其长度的有效负载。如果我不削减这个有效负载,我也会得到对我来说是垃圾的信息。所以我想根据我的有效负载长度来削减有效负载。
我有这部分代码:
uint64_t data_tmp = HTONLL((uint64_t) zp->data);
uint8_t len = zp->length;
uint64_t mask = 0xFFFF >> (64 - len);
data_tmp = data_tmp & mask;
printf("DATA_TMP = %llu\n", data_tmp);
zp->data 写入 t->payload 字段后。这就是我的有效负载。这是一个 64 位字段。
我想临时获取此有效负载。 计算我的有效负载长度,即 uint8 类型的 zp->length 字段。 在创建一个掩码后,该掩码会移动 64 字节 - Payload_length,然后我可以将其应用于临时有效负载并获得一个仅包含我想要的数据且全为零的字段。
我该怎么做?
例如。如果payload_length为01且payload为00+........................(垃圾) 我想在 64 字节上获得类似 00000000 的有效负载。
如果我的payload_length是13,payload 1284732089322309.... 我只想获取十三个字节。
抱歉,如果很难说...
最佳答案
不确定我是否正确理解你的问题,但你使用逻辑 AND 而不是二进制 AND。
表达式“变量 && 变量”的计算结果为 1 或 0
表达式“变量和变量”的计算结果为二进制 AND,使用正确的掩码,将按照您预期的方式裁剪数据
关于c - C 中的移位和掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15296381/