私はウィキペディアのSHA256 pseudocodeを見ています。このfloatの小数部の最初の32ビットは何ですか?
詳しくは、次のセクションを参照してください。
//Initialize variables
//(first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):
h0 := 0x6a09e667
私はh0の生成方法を理解しようとしています。コメントから、これは2の平方根の小数部分でなければならないことが分かります。次のようにタイプすることで2の平方根の小数部分を得ることができると思います。次のコードはすべてpython replのものです。
>>> math.modf(math.sqrt(2))[0]
0.41421356237309515
ファイルの先頭には、すべての定数の宣言がBig Endianであることが記載されています。私は入力するので私の環境はスモールエンディアンであることを知っています。
>>> import sys
>>> sys.byteorder
'little'
だから、H0で進値の私の手動操作に応じて、リトルエンディアン表現は0x67e6096aでなければなりません。
>>> int(0x67e6096a)
1743128938
私は詰まっています。私はいろいろな操作を試みましたが、それらのどれもがこの結果に終わらない。私は、浮動小数点数の小数部の最初の32ビットを取得する方法を知らない。私は何とか私の0.41421356237309515(浮動小数点)の結果を1743128938(int)に変換できると知っていますが、どう考えているのか分かりません。浮動小数点数の小数部分の最初の32ビットを得るために必要なステップは何ですか? Pythonだけが答えます。
ありがとうございます。
だから、Pythonは、短い、int、long(または何でも)ではなく、 "nibblesのストリーム"として16進定数を扱うので、バイトオーダーについて心配する必要はありませんか? Pythonのリテラル16進定数を事実上常にBig Endianにすることはできませんか?愚かな質問の場合はお詫びしますが、私は簡単に混乱しています。 :) –
並べ替えがありますが、これはPython固有のものではありません。それは単に数字を書いた順序です。この順序は、テキストが右から左に向かうアラビア文字から継承されていることに注意してください。その視点では、リトルエンディアンです。バイトに分割されていないので、バイトスワッピングは関係ありません。 –