【发布时间】:2018-02-06 07:51:51
【问题描述】:
我有两个变量:一个名为diff 的float 具有类似894077435904.000000 的值(并非总是只有小数部分为零)和一个char[32],它是双sha256 计算的结果。我需要对它们进行比较(if(hash < diff) { //do someting }),但为此我需要将一个转换为另一个的类型。
有没有办法做到这一点?例如,将float 转换为char*(并使用strcmp 进行比较)或将char* 转换为float(并使用上述方法——如果可能的话,考虑char*是 256 位还是 32 字节长)?
我尝试将float 转换为char*,如下所示:
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);
当我有diff=894077435904.000000 时,我会得到hex_str=d02b2b00。如何验证此值是否正确?使用this converter 得到不同的结果。
【问题讨论】:
-
您需要进行数学运算以将难度转换为目标,然后您需要将目标与哈希结果进行比较(可能与
memcmp)。有关如何将难度转换为目标的更多信息,请参阅here。 -
我已经做了这个数学运算(我从 json-rpc 接口读取了
bits,转换为unsigned int并传递给您发布的链接中列出的函数)。现在我只需要将难度与哈希进行比较,我猜。 -
好的。为此使用
memcmp。如果哈希值小于目标值,则获胜。 -
哦,您可能需要先将其从十六进制转换为原始格式。真的,你一开始就不应该用十六进制。 Hex 真的只供人类食用。
-
也可以使用
>>shift 运算符来实现
标签: c arrays floating-point char hex