当你把一个十六进制,你得到了什么?

问题描述 投票:2回答:2

我试图创建存储的十六进制数的哈希函数,但我不知道什么是哈希函数是。我得到它是从一个文本文件中的十六进制数的地址,然后将它们转换成无符号长long int类型。我试图创建大小为1000的哈希表,那么究竟我能得到什么,当我把这些长长的整数?我完全不明白这一点。

输入文件包含这样几行:

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);
}
c hex
2个回答
3
投票

十六进制,十进制和八进制仅仅3种不同的打印到屏幕相同数量的方法。

让我们来看看100号我们可以在小数打印为100。同样,我们可以在八进制打印为0144。我们可以用十六进制打印为0x64

但是,所有这三个都代表相同的号码。所以100 / 30144 / 30x64 / 3的结果都是相同的。

Onto your real question...

你有许多x。你想限制x[0, 0x1000)之间的数字。要做到这一点,最简单的方法是做:

unsigned long long x;
unsigned long long y = x % 0x1000;

现在Ÿ将[0, 0x1000)的范围内。这基本上是通过从0x1000减去x直到它小于0x1000完成。


0
投票

所以,如果你想在1000哈希表的大小,那么你需要得到了0x3e8的模所以例如0x7f1a91026b00%了0x3e8 = 0x20的。这表示在癸32。

十六进制了0x3e8 = 1000年12月。

© www.soinside.com 2019 - 2024. All rights reserved.