将哈希转换为4个十六进制数

时间:2015-04-08 12:57:56

标签: c hex md5 scanf

我想将我的MD5哈希转换为4个十六进制数字。我的代码有什么问题?

//hash = 8ce4b16b22b58894aa86c421e8759df3
char *hash = argv[1];
unsigned int parts[4];

sscanf(&hash[0], "%x", &parts[0]);
sscanf(&hash[8], "%x", &parts[1]);
sscanf(&hash[16], "%x", &parts[2]);
sscanf(&hash[24], "%x", &parts[3]);

printf("Part[0]: %x\n", parts[0]);
printf("Part[1]: %x\n", parts[1]);
printf("Part[2]: %x\n", parts[2]);
printf("Part[3]: %x\n", parts[3]);

2 个答案:

答案 0 :(得分:1)

在您的代码中,想要但忘记限制 HEX值的输入设置为8(以字符为单位)。您需要使用字段宽度说明符和格式说明符。你需要像

这样的东西
sscanf(&hash[0], "%8x", &parts[0]);
sscanf(&hash[8], "%8x", &parts[1]);
sscanf(&hash[16], "%8x", &parts[2]);
sscanf(&hash[24], "%8x", &parts[3]);

答案 1 :(得分:1)

在你的代码中,你试图告诉sscanf()从哪里开始解析字符串(存储在名为“hash”的变量中),但是你没有告诉sscanf()它应该停止解析它。尝试将空白字符插入“哈希”中,首先要分割4个数字,然后您的代码可以正常工作。另外,我会写“&(hash [0])”而不是“& hash [0]”,因为我不想用琐事来混乱我的内存库,例如C的运算符优先级规则 - 更容易用括号来逼迫我想要的东西。