我正在看维基百科上的以下SHA256 pseudocode。该浮点数的小数部分的前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。我知道我的环境是Small Endian,因为我输入了。
>>> import sys
>>> sys.byteorder
'little'
因此,根据我手动操作h0中的十六进制值,Little Endian表示应该是0x67e6096a。
>>> int(0x67e6096a)
1743128938
而我被卡住了。我尝试了各种操作,但其中没有一个最终得到这个结果。我不知道如何获得浮点数的小数部分的前32位。我知道我的0.41421356237309515(float)结果可以转换为1743128938(int),但我真的不知道如何。获得浮点数的小数部分的前32位需要执行哪些步骤? Python只回答请。
谢谢。
因此,因为Python将十六进制常量处理为“半字节流”而不是短,int,long(或其他),所以我不必担心字节顺序?难道这不会使Python常量有效地总是Big Endian吗?如果一个愚蠢的问题道歉,但我很容易混淆。 :) – 2011-01-12 23:59:02
是的排序,但这不是Python特定的。这只是我们写数字的顺序。请注意,此订单是从阿拉伯文书写继承的,文字从右向左;有了这个观点,这是小端。然而,它没有被分成字节,所以字节交换是不相关的。 – 2011-01-13 00:25:25