[英]What exactly do these 3 lines of C code do?
我一直在尝试解析它们几天,但我不太理解。 他们来了:
int left = S->buflen >> 3;
int fill = 64 - left;
if(left && (((datalen >> 3) & 0x3F) >= (unsigned)fill)){
some code here
}
如果有帮助,则在SHA-3候选BLAKE256的参考实现中。
一个没有问题的替代方法可能有助于弄清含义:
int left = S->buflen / 8;
int fill = 64 - left;
if (left != 0) {
int tmp = datalen / 8;
if ((tmp % 64) >= (unsigned)fill) {
/* Some code here */
}
}
当然,这假定buflen
和datalen
为非负数,因为右移运算符对负数具有平台相关的行为。
int left = S->buflen >> 3;
假设buflen
是以位为单位的度量,请获取剩余的字节数。
int fill = 64 - left;
获取因此需要附加以四舍五入为64的倍数的字节数。请注意,如果S->buflen
为0,则在不需要附加任何字节时最终将附加整个64个字节,因此...
if(left && (((datalen >> 3) & 0x3F) >= (unsigned)fill)){
some code here
}
...仅在还剩一些位和datalen
,从位转换为字节时,才在此处执行一些代码,mod 64至少等于您需要写入的额外字节数。 大概是因为datalen
是最大输出大小?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.