コードがuint64_tの上位部分と下位部分のスワップの数学的意味は何ですか?
uint64_t swapE64(uint64_t val) {
uint64_t x = val;
x = (x & 0xffffffff00000000) >> 32 | (x & 0x00000000ffffffff) << 32;
x = (x & 0xffff0000ffff0000) >> 16 | (x & 0x0000ffff0000ffff) << 16;
x = (x & 0xff00ff00ff00ff00) >> 8 | (x & 0x00ff00ff00ff00ff) << 8;
return x;
}
、sha256のオープンソースプロジェクトからある機能は複雑ではありませんが、私は、その数学的な手段と使用法を知りません。
私のせいで、私は質問を非常に明確にしませんでした。異なるエンディアン表現を使用する異なる環境では、この関数は同じ意味でデータを保持しますが、同じエンディアン表現では、それはどういう意味ですか?
これは絶対にデータの意味を変えますか、それともそれを交換する他の理由がありますか?ウィキペディアにSHA256ためpseudocodeで
SHA256のための仕様を読んで、そしてすべてはあなたに明らかであろう。これは、基本的に、int64のエンディアンを交換しています。 –
@SamVarshavchik、私はgithubからsha256の他の実装をいくつか読みましたが、そのような機能はありません。 – Patrick
この質問に対する良い答えは、バイナリで数値を表現する方法を理解しているかどうかを知ることです。また、エンディアンが何を意味するのか知っていますか? – asimes