我有这个问题。我有一个有效载荷,可以改变它的长度。如果我不削减这个有效载荷,我也会收到垃圾信息。所以我想在有效载荷长度的基础上削减有效载荷。
我有这部分代码:
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->数据在写入t->有效载荷字段之后。所以这是我的有效载荷。这是一个64位字段。
我想暂时接受这个有效载荷。 计算我的有效负载长度,即uint8类型的zp->长度字段。 之后,我将创建一个64字节移位的掩码 - payload_length,然后将其应用于临时有效负载,并获得仅包含我想要的数据和全零的字段。
我该怎么做?
例如。如果payload_length为01且有效负载为00 + ..............(垃圾) 我想在64字节上获得像00000000这样的有效载荷。
如果我的payload_length是13并且有效载荷1284732089322309 .... 我想只获得三十个字节。
很抱歉,如果很难说......
答案 0 :(得分:1)
不确定我是否正确理解了您的问题,但您使用的是逻辑AND而不是二进制AND。
表达式“variable&& variable”的计算结果为1或0
表达式“变量和变量”评估为二进制AND,使用适当的掩码,将按照您的预期裁剪数据
答案 1 :(得分:0)
你需要这个:
uint64_t mask = (1uLL << (len * 4)) - 1;
data_tmp = data_tmp & mask;
这将为您提供最低 len
的4位数字。如果您需要最高,则可以在应用蒙版前旋转data_tmp
:
data_tmp >>= (64 - len * 4)