InChi ライブラリ (ここで入手可能: http://www.iupac.org/home/publications/e-resources/inchi.html ) には、SHA-2 アルゴリズムのカスタム実装があります (実装であり、アルゴリズムではありません)。理解しようとしています。特に、コードの 1 つの短い断片が非常に紛らわしいです。
#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
これlong
をキャストするとどうなるかわかりませんか? それは最初の x バイトまたは最後のバイトまたは?unsigned char
PUT_UINT32_BE
total[0] % 256