我需要从字符串的哈希生成种子。这个种子将用于生成随机数,我可能会使用srandom(),但是这个函数不会将char缓冲区作为参数取一个整数。有什么方法可以使用char缓冲区为srandom播种,或者我可以通过其他方式从散列键生成int种子。希望你能帮忙!
答案 0 :(得分:0)
将字符串解析为您正在寻找的数字?如果是这样,试试这个:
char buf[] = "12345678";
int number = strtol(buf, NULL, 10);
srand(number);
编辑:来自您的评论:
我正在使用MD5来散列它
你想要获得你所追加的价值吗?那你就错过了散列的基本概念。你无法从哈希中获得哈希值,这就是重点。
答案 1 :(得分:0)
由于您目前没有发布任何代码,我在这里做了几个假设。
char *strHash = "ABCD1234"; // could be anything, i.e. "HelloWorld!"
int intNumberFromHash = 0;
for(int intCurrentCharacter = 0; strHash[intCurrentCharacter] != '\0'; intCurrentCharacter++){
intNumberFromHash <<= 8; // effectively multiply by 256
intNumberFromHash += strHash[intCurrentCharacter];
}
srandom(intNumberFromHash);
此代码将从“字符串”生成“数字”。然而,它不是很聪明(即它会经常溢出,最后只有最后四个字符真正做任何事情)。如果哈希是一个十六进制值,你可能想要做这样的事情。
sscanf(theHash,"%x",number);
srandom(number);
%x
修饰符将使用小写值(即“abcd1234”)转换十六进制值。 %X
将执行大写十六进制(“ABCD1234”)。
答案 2 :(得分:0)
char *hashKey = "helloWorld!"; /* your Hash pointer */
int intHash = 0;
int hashCarry = 0;
for(int i = 0; hashKey[i] != '\0'; i++){
intHash ^= hashKey[i]; // XORing with current character
hashCarry = intHash & 0xF0000000; /* getting 4 bits - MSBs */
intHash <<= 4; // Multiplying it by 16
intHash += hashCarry >> 28; /* e.g 0xF0000000 becomes 0x0000000F */
}
srandom(intHash);
希望这会有所帮助......
上述代码不会破坏任何HashKey位。
答案 3 :(得分:0)
你可以使用initstate(3),还是我错过了什么?