Estoy mirando el siguiente SHA256 pseudocode en la wikipedia.¿Cuáles son los primeros 32 bits de la parte fraccionaria de este flotador?
Específicamente, estoy mirando la siguiente sección.
//Initialize variables
//(first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):
h0 := 0x6a09e667
Estoy tratando de averiguar cómo se generó h0. Sé por el comentario que esta debería ser la parte fraccionaria de la raíz cuadrada de 2. Creo que puedo obtener la parte fraccional de la raíz cuadrada de 2 escribiendo lo siguiente. Todo el siguiente código es de python repl.
>>> math.modf(math.sqrt(2))[0]
0.41421356237309515
En la parte superior del archivo indica que la declaración de todas las constantes es Big Endian. Sé que mi entorno es Small Endian porque escribo.
>>> import sys
>>> sys.byteorder
'little'
Así, de acuerdo a mi manipulación manual del valor hexadecimal en H0, la representación de Little Endian debe ser 0x67e6096a.
>>> int(0x67e6096a)
1743128938
y estoy atascado. He intentado varias manipulaciones, pero ninguna de ellas termina con este resultado. No sé cómo obtener los primeros 32 bits de la parte fraccionaria de un número de punto flotante. Sé que de alguna manera mi resultado 0.41421356237309515 (flotante) se puede transformar en 1743128938 (int), pero realmente no tengo idea de cómo. ¿Cuáles son los pasos necesarios para obtener los primeros 32 bits de la parte fraccionaria de un número de coma flotante? Python solo responde por favor.
Gracias.
Entonces, dado que Python trata con las constantes hexadecimales como una "secuencia de nibbles" en lugar de cortas, int, largas (o lo que sea), ¿no tengo que preocuparme por el orden de los bytes? ¿Eso no haría que Python literalmente las constantes hexagonales efectivamente siempre sean Big Endian?Disculpe si es una pregunta estúpida, pero me confundo fácilmente. :) –
Tipo de sí, pero esto no es nada específico de Python. Ese es simplemente el orden en que escribimos los números. Tenga en cuenta que este orden se hereda de la escritura árabe, donde el texto va de derecha a izquierda; con esa vista, es pequeño endian. Sin embargo, no está dividido en bytes, por lo que el intercambio de bytes no es relevante. –