0

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

我有这部分代码:

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 且有效负载 00+.................(垃圾)我想在 64 字节上获得像 00000000 这样的有效负载。

如果我的有效载荷长度为 13 且有效载荷为 1284732089322309.... 我只想获得 13 个字节。

抱歉,如果很难说...

4

2 回答 2

1

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

表达式“变量 && 变量”的计算结果为 1 或 0

表达式 "variable & variable" 计算为二进制 AND,使用适当的掩码,它将按照您的预期裁剪数据

于 2013-03-08T14:46:44.353 回答
0

你需要这个:

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

这将为您提供最低 len的 4 位数字。如果您需要最高,则可以data_tmp在应用蒙版之前旋转:

data_tmp >>= (64 - len * 4)
于 2013-03-08T14:53:07.667 回答