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