将哈希值转换为 4 个十六进制数
Convert hash to 4 hex numbers
我想将我的 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]);
在您的代码中,您想要但忘记了将 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]);
在你的代码中,你试图告诉 sscanf() 从哪里开始解析字符串(存储在名为 "hash" 的变量中),但你并没有告诉 sscanf() 它应该在哪里停止解析它。首先尝试将空白字符插入到 "hash" 中,您希望将 4 个数字分开,然后您的代码可能会起作用。另外,我会写“&(hash[0])”而不是“&hash[0]”,因为我不想让我的记忆库变得杂乱无章,比如 C 的运算符优先规则——使用括号更容易强制我想要的。
我想将我的 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]);
在您的代码中,您想要但忘记了将 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]);
在你的代码中,你试图告诉 sscanf() 从哪里开始解析字符串(存储在名为 "hash" 的变量中),但你并没有告诉 sscanf() 它应该在哪里停止解析它。首先尝试将空白字符插入到 "hash" 中,您希望将 4 个数字分开,然后您的代码可能会起作用。另外,我会写“&(hash[0])”而不是“&hash[0]”,因为我不想让我的记忆库变得杂乱无章,比如 C 的运算符优先规则——使用括号更容易强制我想要的。