繁体   English   中英

这三行C代码到底是做什么的?

[英]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 */
    }
}

当然,这假定buflendatalen为非负数,因为右移运算符对负数具有平台相关的行为。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM