C中的移位和屏蔽



我有这个问题。我有一个动态改变长度的有效载荷。如果我不削减这个有效载荷,我也会得到对我来说是垃圾的信息。所以我想在有效载荷长度的基础上削减有效载荷

我有这部分代码:

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 = %llun", data_tmp);

zp->数据写入t->负载字段后。这是我的有效载荷。这是一个64位的字段。

我想临时获取这个有效负载。计算我的有效载荷长度,即zp->长度字段,类型为uint8。之后,我会创建一个64字节的掩码- payload_length,这样我就可以将它应用于临时有效负载,并获得一个只有我想要的数据和全零的字段。

我该怎么做?

例如

。如果payload_length为01,载荷为00+..............(垃圾)我想在64字节上获得像00000000这样的有效载荷。

如果我的payload_length是13和有效载荷1284732089322309....我只需要13个字节。

不确定我是否正确理解了你的问题,但你使用逻辑与而不是二进制与。

表达式"变量&&变量"求值为1或0

表达式"变量&

你需要这个:

uint64_t mask = (1uLL << (len * 4)) - 1;
data_tmp = data_tmp & mask;

这将给出4位数字的最小 len。如果你需要最高,你可以在应用掩码之前旋转data_tmp:

data_tmp >>= (64 - len * 4)

相关内容

  • 没有找到相关文章

最新更新