Ich habe zwei Variablen: ein float
genannt diff
mit einem Wert wie 894077435904.000000
(nicht immer nur mit Null in der Dezimalteil) und ein char[32]
die das ist Ergebnis einer Double-Sha256-Berechnung. Ich muss einen Vergleich zwischen ihnen machen (if(hash < diff) { //do someting }
), aber dafür muss ich einen zum Typ des anderen umwandeln.Umstellen von Schwimmers auf char [32] (oder umgekehrt) in C
Gibt es eine Möglichkeit, dies zu erreichen? Zum Beispiel, die float
in eine char*
umwandeln (und strcmp
, um den Vergleich zu tun) oder die char*
zu float
(und mit der oben genannten Ansatz - wenn es überhaupt möglich ist, unter Berücksichtigung der char*
ist 256 Bits oder 32 Bytes lang)?
Ich habe versucht, float
zu char*
wie diese Umwandlung:
char hex_str[2*sizeof(diff)+1];
snprintf(hex_str, sizeof(hex_str), "%0*lx", (int)(2*sizeof diff), (long unsigned int)diff);
printf("%s\n", hex_str);
Als ich diff=894077435904.000000
habe ich hex_str=d02b2b00
bekommen. Wie kann ich überprüfen, ob dieser Wert korrekt ist? Mit this converter erhalte ich unterschiedliche Ergebnisse.
Sie müssen die Mathematik tun, die Schwierigkeit zu einem Ziel zu konvertieren und dann müssen Sie das Ziel auf das Hash-Ergebnis vergleichen (wahrscheinlich mit 'memcmp'). Unter [hier] (https://en.bitcoin.it/wiki/Difficulty) erfahren Sie, wie Sie Schwierigkeit in ein Ziel umwandeln können. –
Ich mache diese Mathematik bereits (ich lese die 'Bits' von der json-rpc-Schnittstelle, konvertiere zu' unsigned int' und gehe zu der Funktion, die in dem von Ihnen geposteten Link aufgeführt ist). Jetzt muss ich nur die Schwierigkeit mit dem Hash vergleichen, denke ich. –
Okay. Verwenden Sie 'memcmp' dafür. Wenn der Hash kleiner als das Ziel ist, gewinnen Sie. –