2015-04-08 46 views
0

我想將我的MD5散列轉換爲4個十六進制數。我的代碼有什麼問題?將散列轉換爲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]); 
+1

你試過'sscanf(&hash [0],「%8x」,&parts [0]);'on? –

+0

謝謝你的伴侶。有用!你可以寫信,我會接受它... – Bakus123

回答

1

在代碼中,你想卻忘限制的輸入十六進制值至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

在你的代碼,你想告訴的sscanf()從哪裏開始解析字符串(存儲在一個名爲「哈希」的變量),但你不會告訴的sscanf()它應該停止解析它。嘗試將空白字符插入「散列」,您希望將4個數字分開,首先,然後您的代碼可能會工作。此外,我會寫「&(散列[0])」而不是「&散列[0]」,因爲我不想混淆我的記憶庫與瑣事,如C的運算符優先級規則 - 更容易使用括號強迫我想要的東西。