【发布时间】:2015-02-27 20:42:45
【问题描述】:
我正在尝试创建一个存储十六进制的哈希函数,但我不确定哈希函数是什么。我从文本文件中获取十六进制地址,然后将它们转换为 unsigned long long int。我正在尝试创建一个大小为 1000 的哈希表,那么当我划分这些 long long int 时,我到底得到了什么?我不完全明白这一点。
输入文件包含如下行:
0x7f1a91026b00
0x7f1a91026b03
0x7f1a91027130
0x7f1a91027131
0x7f1a91027134
0x7f1a91027136
这是我目前的代码(我暂时没有创建哈希表,因为我没有哈希函数)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (int argc, char **argv){
if(argc!=2){
printf("error\n");
return 0;
// if there is no input then print an error
}
FILE *file = fopen(argv[1], "r"); // open file
if (!file){
printf("error\n");
return 0;
}
char linestring[BUFSIZ];
while (fgets(linestring, sizeof(linestring), file)) // reads the entire file until it hits Null
{
char *endptr;
unsigned long long key = strtoull(linestring, &endptr, 16);
printf("%s\n", linestring);
}
fclose(file);
}
【问题讨论】:
-
您的问题没有意义,hex 或 decimal 之间没有区别,除了表示最终将是 二进制,想想这个
int x = 0x04; int y = x / 2; printf("%d\n", y);输出是什么? -
@iharob 但可以说我有 "7f1a91027130" ,我不确定将它除以某个数字会得到什么。
-
它会给你数学除法的结果,我想..
-
对不起,如果我感到困惑,我正在学习计算机体系结构,这不是家庭作业,但我只是想弄清楚这实际上是如何工作的。
-
如果我想为此创建一个哈希函数,我希望输出小于 1000。那么我如何判断该十六进制除以某个数字是否会小于 1000?这就是我试图弄清楚我无法通过查看来判断的原因