c - 当你除以十六进制时,你会得到什么?

标签 c hex

我正在尝试创建一个存储十六进制的哈希函数,但我不确定哈希函数是什么。我从文本文件中获取十六进制地址,然后将它们转换为无符号长整型。我正在尝试创建一个大小为 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);
}

最佳答案

十六进制、十进制和八进制只是打印到屏幕相同数字的 3 种不同方式。

让我们看一下数字100。我们可以将其打印为十进制 100。同样,我们可以将其打印为八进制 0144。我们可以将其以十六进制打印为 0x64

但是这三个都代表相同的数字。因此,100/30144/30x64/3 的结果都是相同

关于你真正的问题...

您有一个号码x。您希望将 x 限制为 [0, 0x1000) 之间的数字。最简单的方法是:

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

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

关于c - 当你除以十六进制时,你会得到什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28773901/

相关文章:

c - 具有指针和链表删除功能的不兼容类型

c - 使用 getchar() 和 putchar() 用数组输入和输出一组字符

c - C中的进程同步不会第一次执行

ios - float 如何用十六进制表示?

c - 在c中执行以下程序时出现错误

c - 为什么 fputs() 只在文件中添加一个单词?

C 将 emacs 中的十六进制值转换为不正确的值

c - 打开一个 png 文件并在 C 中读取它的十六进制值

python - 如何将十六进制数转换为存储在 DWORD 而不是 QWORD 中的十进制数?

c - 使用C逐字节读取文件