InChi库(可在此处获得:http://www.iupac.org/home/publications/e-resources/inchi.html)我试图理解SHA-2算法的自定义实现(实现,而不是算法)。在代码特定的一个短片段是真的混乱:在SHA-2算法中将长整型转换为无符号字符
#define PUT_UINT32_BE(n,b,i) \
{ \
(b)[(i) ] = (unsigned char) ((n) >> 24); \
(b)[(i) + 1] = (unsigned char) ((n) >> 16); \
(b)[(i) + 2] = (unsigned char) ((n) >> 8); \
(b)[(i) + 3] = (unsigned char) ((n) ); \
}
#endif
该宏在本文中使用:
unsigned char msglen[8];
low = (ctx->total[0] << 3);
PUT_UINT32_BE(low, msglen, 4);
问题是,总定义为long
一个表:
unsigned long total[2]; /*!< number of bytes processed */
所以现在,如果total保存处理的字节数,很有可能total[0]
可能大于256(这可能是它被定义为的原因),所以我不知道将这个long
投射到PUT_UINT32_BE
宏中的效果是unsigned char
吗?会得到第一个x字节或最后一个字节或total[0] % 256
?
更仔细地阅读宏...它需要32位值的每个8位分量并重新排列它们。 –
哦,我没有看到如何在你提供的上下文中调用宏? –
@JoachimPileborg - 上下文现在已更正。在我的情况低= 904所以我怎么能投904无符号字符? – mnowotka