Tag: 二进制

二进制搜索C.

这是二进制搜索function的签名: void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 我不明白为什么我们发送一个void *作为数组指针,而不是void **,因为据我所知,如果我在int数组中寻找一个int,我应该发送一个int *作为数组,而不是int …如果函数的签名是这样的,实现是否会有很大的不同(或者可能无法实现): void *bsearch(const void *key, const void** base , size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 提前致谢。

我应该使用什么类型的C enum的二进制表示?

我知道C enum是无符号整数,但这可能因实现而异。 我应该在二进制表示中使用什么类型的枚举? * PS’二进制表示’表示字节数组。 我想将枚举值序列化为socket以与其他程序进行交互操作。

C,从bin文件中读取二进制文件

我对C很陌生,但我遇到了一个问题… 我的最终目标是从.bin文件中读取(然后printf到控制台)二进制文件,但是现在我一步一步地尝试只读取第一位… 我的代码: … FILE *file = fopen(“test1.bin”, rb); int i = 0; fread(&i, 1, 1, file); printf(“%i\n”, i); … 现在我尝试了三个不同的.bin文件,一个输出0,另外两个输出12个! 当我从文件中读取1位时,为什么输出2/12? 不应该是0还是1? 我究竟做错了什么? 非常感谢。

位移x *一个数字

你如何从这些位移实践问题中获得-10数字? 根据我的理解, X*32可以写成x<<5 。 但你怎么得到像x*66或X*(-10) ?

二进制打印在C中不起作用

我正在尝试使用c中的32位位掩码打印二进制文件,但二进制表示不会在if语句中打印出来。 unsigned int bit_mask = 2147483648; int decimal = 2; printf(“\nBinary representation of 2: \n”); while(bit_mask > 0){ if((decimal & bit_mask) == 0) printf(“0”); else printf(“1”); bit_mask = bit_mask >> 1; } decimal = 255; printf(“\n\nBinary representation of 255: \n”); while(bit_mask > 0){ if((decimal & bit_mask) == 0) printf(“0”); else printf(“1”); bit_mask = bit_mask >> […]

如何将int与分数相乘

我需要使用按位运算符将int乘以分数而不使用循环等。 例如,我需要将x乘以3/8。 我以为你会: int value = (x <> 3); // Divide by 8 但那不起作用。 我尝试使用谷歌搜索二进制时间分数,但这给出了浮点示例。 我不确切地知道这个作业是否适用于浮点数但是我的预感不是让我为此做好准备。 那有什么建议吗? 我需要向零舍入所以任何建议? 这不适用于数字-268435457。

32位整数掩码

我正在完成一些CSE作业,我有一个关于声明更大比特大小的整数的快速问题。 我的任务是实现一个函数,如果x的任何奇数位为1(假设x的大小为32位),则返回1,否则返回0。 我允许声明一个具有位值的整数: 10101010101010101010101010101010 如果是这样,那么可能会出现任何问题吗? 如果没有,为什么不呢? 我有什么替代品? 我的function: int any_odd_one(unsigned x) { int mask = 10101010101010101010101010101010 if(x & mask) { return 1; } else { return 0; } } 在此先感谢您的任何帮助! -Matt

将非ASCII字符写入tty上的程序员的stdin(通过ssh)

我被SSH连接到一个带有一些二进制挑战的远程服务器。 有一次它要求我输入文字。 我知道它正在使用fgets()来读取stdin ,并且我可以溢出它被复制到的地方并覆盖附近的变量。 问题是我不知道如何键入我需要的地址值, \x84和\x04等。如果我能够使用bash我会echo -ne “\x84″或使用Chex数组但我可以’在这里做那种事。 我尝试使用hex到ASCII转换器并复制二进制字符,并使用expect脚本发送二进制值,但两者都有相同的问题。 x84添加了额外的字符,x04根本不会写入。 任何想法是可靠地将值写入内存的最佳方法,这些内容在Unix tty上通过ssh无法用ASCII字符表示?

将无符号16位整数存储到文件的最有效方法

我正在使用字典最大大小为64000的字典压缩器。因此,我将我的条目存储为16位整数。 我正在做什么:要编码’a’,我得到它的ASCII值,97,然后将此数字转换为16位整数97的字符串表示。所以我最终编码’0000000001100001’为’a ‘,这显然不会在短期内节省太多空间。 我知道这个算法的更有效版本将从较小的整数大小开始(在我们需要更多的情况下存储的位数较少),但我想知道是否有更好的方法来 将我的整数’97’转换为固定长度的ASCII字符串,可以存储16位数据(97将是x位,46347也将是x位) 写入只能存储1和0的文件。 因为实际上,似乎我在文本文件中写了16个ascii字符,每个字符都是8位……所以这并不能真正帮助这个原因,是吗? 如果我能以任何方式更清楚,请告诉我。 我对这个网站很新。 谢谢! 编辑:就我所知,我如何存储我的字典完全取决于我。 我只知道我需要能够轻松地读回编码文件并从中获取整数。 另外,我只能包含我为该程序编写的stdio.h,stdlib.h,string.h和头文件。

位移大二进制文件?

在C中对大量二进制数据进行位移的最佳或推荐方法是什么? 我有一个200K的二进制文件,我想离开,然后右移整个批次。