我想将我的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]);
答案 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的运算符优先级规则 - 更容易用括号来逼迫我想要的东西。