我有两个变量:一个名为float
的{{1}},其值类似于diff
(小数部分中并不总是只有零)和一个894077435904.000000
double-sha256计算的结果。我需要在它们之间进行比较(char[32]
),但为此我需要将一个转换为另一个的类型。
有没有办法实现这个目标?例如,将if(hash < diff) { //do someting }
转换为float
(并使用char*
进行比较)或strcmp
转换为char*
(并使用上述方法 - 如果它甚至可能,考虑到float
是256位还是32字节长?
我尝试将char*
转换为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
。如何验证此值是否正确?使用this converter我获得了不同的结果。
答案 0 :(得分:3)
详细解释here。
memcmp
将其与原始二进制文件中的哈希进行比较。示例代码:
#include <stdio.h>
#include <string.h>
char* tohex="0123456789ABCDEF";
void computeDifficulty(unsigned char* buf, unsigned j)
{
memset(buf, 0, 32);
int offset = 32 - (j >> 24);
buf[offset] = (j >> 16) & 0xffu;
buf[offset + 1] = (j >> 8) & 0xffu;
buf[offset + 2] = j & 0xffu;
}
void showDifficulty(unsigned j)
{
unsigned char buf[32];
computeDifficulty(buf, j);
printf("%x -> ", j);
for (int i = 0; i < 32; ++i)
printf("%c%c ", tohex[buf[i] >> 4], tohex[buf[i] & 0xf]);
printf("\n");
}
int main()
{
showDifficulty(0x1b0404cbu);
}
输出:
1b0404cb -> 00 00 00 00 00 04 04 CB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00