Tag: 二进制

二进制文件读/写C语言

所以我有一个input.bin文件,其中包含以下内容 IK-SZH;jdl72u;John Doe;2013-03-28 11:05 IK-GRR;kat91n;Jane Doe;2013-03-21 15:41 IK-GRR;oat62f;Jane Doe;2013-03-24 08:08 我正在做的是把它读成一个结构。 用数据做一些事情。 添加/删除行。 然后我想以与上面相同的格式将结构的内容写回input.bin文件。 但不是像上面那样出现。 就像这样(没有空格): IK-SZH NUL jdl72u NUL John Doe NUL NUL NUL NUL NUL 2013-03-28 NUL NUL NUL IK-GRR NUL kat91n NUL Jane Doe NUL NUL NUL NUL … 当我重新读取文件(使用NUL)时,它只将第1行放入结构中 我的代码 typedef struct foo { char kid[7]; char jid[7]; char name[21]; char […]

表示数字x所需的位数

我目前正在尝试编写一种算法来确定表示数字x所需的位数。 我的实现将在c。 虽然有一些捕获,但我仅限于按位运算符{〜,&,^,|,+,<>}。 另外,我不能使用任何类型的控制流程(if,while,for)。 我最初的方法是从左到右检查二进制数,并查找第一个’1’出现的位置。 鉴于我的限制,我不确定如何处理这个问题。 我正在使用的数字可以被认为是无符号整数。 所以00110只需要3位。 我想知道是否有更容易/更清洁的方法来做到这一点,我想念它? 或者,如果有人可以提供一些提示? 基本上,我试图在没有while循环的情况下实现它: int result = 0; while (x >>= 1) { result += 1; } return result;

C:将二进制文件读取到内存,更改缓冲区,将缓冲区写入文件

目标:用二进制数据打开文件,将整个文件读入内存,更改文件的某些部分,将内存缓冲区写入文件,关闭文件。 利润? 问题:我刚刚开始学习C,我找不到有关如何更改内存缓冲区中的二进制数据的足够信息。 来自Web开发人员背景(php,python,as3)这对我来说是一个新的领域。 上下文:我有一个函数,它接受文件的路径和指针地址到char指针的内存缓冲区。 然后它打开文件,遍历文件并将数据写入内存缓冲区。 最后关闭文件。 二进制文件的目的是为某些对象保存category-id,它们的位置是它们自己的id。 category-id表示为2字节短路。 所以基本上它只是一个二进制文件,里面装满了很多我希望能够阅读和更改的短裤。 这是我到目前为止所得到的: main.c中: #include “binary-handler.h” void showFileBuffer(char *buffer, unsigned int fileSize){ int i = 0; for(; i < fileSize; ++i){ printf("\n”, i, ((char *)buffer)[i]); } } int main(){ char path[] = “assets/map-squares.bin”; char *buffer; int fileSize; fileSize = readFileToMemory(path, &buffer); showFileBuffer(buffer, fileSize); //Code to change buffer […]

直接以二进制执行计算机指令

在C.我需要一种在程序运行时直接执行计算机指令的方法。 我知道如何以二进制编写指令的唯一方法是通过hex编辑器,然后将该文件作为应用程序运行。 如何使用程序编写二进制文件,然后从它们执行它而无需创建新的执行过程。 看起来他们应该是一个简单的方法来做到这一点,但无论我在哪里,我都找不到它。 我能想到的另一种方法是通过内联汇编,但在我当前的项目中,这将是一个缺点,直接使用二进制执行是最好的方法。 (这可能需要Windows上的驱动程序吗?如何在linux上执行?换句话说,跨平台方法会很好) 谢谢。

最低位的索引

我想找到获得long long最低位的索引的最快方法。 即: 00101001001000 -> 3 涉及循环和移位的解决方案太慢了。 即: int i; if(bits == 0ULL) { i = 64; } else { for(i = 0;!(bits & 1ULL);i++) bits >>= 1; } 编辑:使用信息 使用ffsll的函数不能真正减少它的用法,但在这里(当然简化)。 它只是迭代索引并对它们做了一些事情。 这个函数可能是我整个应用程序中使用最广泛的函数,尽管有很多缓存它的价值。 它是我的alpha-beta搜索引擎中的合法移动生成器。 while(bits){ index = ffsll(bits); doSomething(index); index &= index-1; }

如何使用C查找数字中的前导零数

例如,如果我有64号,那么它的二进制表示将是0000 0000 0000 0000 0000 0000 0100 0000,因此零的前导数是25.记住我必须在O(1)时间内计算它。 请告诉我正确的方法。即使你的复杂性> O(1),请发表你的答案。 感谢名单

C反向二进制

可能重复: C无符号整数的反转位 如何仅使用二元运算符反转二进制数? 例如: 11100000 -> 00000111 00110100 -> 00101100 00111111 -> 11111100

将位写入C中的文件

我有这个字符串:“101”我想把它写成一个文件,在C中,而不是文本:“101”,所以8位x char。 但直接使用字符串作为位:位“1”,位“0”和位“1”,因此文件将为3位。 有可能吗? 我在网上搜索过,我试过这样做: char c[25] = “101”; FILE *binFile = fopen(“binFile.bin”, “wb”); int x = atoi(c); fwrite(&x, sizeof(x), 1, binFile); 但最后,当我validation文件的字节时,Windows告诉我它是4bytes文件! 而不是3bits! 如果有可能,我怎么能这样做? 非常感谢。

如何从变量中访问特定的位组?

我有一个“x”位的变量。 如何提取特定的一组位然后在C中处理它们?

如何将文件嵌入可执行文件?

我有两个问题,第一个已经解决了。 目前的问题 如果我嵌入了一个需要加载库的文件,例如jpeg图像或mp3音乐,我将需要使用该文件作为库的输入。 但是,每个库都是不同的,并使用一种方法来获取文件作为输入,输入可以是文件名或FILE *指针(来自libc的文件界面)。 我想知道如何访问带有名称的嵌入式文件。 如果我创建一个临时文件会有效率,还有另一种方法吗? 我可以将文件名映射到内存吗? 我的平台是Windows和Linux。 如果show_file(const char * name)是库中的函数,我将需要一个字符串来打开该文件。 我看过这些问题: 如何在内存中获取缓冲区的文件描述符? 从C中的文件描述符获取文件名 以下代码是我的解决方案。 这是一个好的解决方案吗? 它效率低下吗? # include # include extern char _binary_data_txt_start; extern const void* _binary_data_txt_size; const size_t len = (size_t)&_binary_data_txt_size; void show_file(const char* name){ FILE* file = fopen(name, “r”); if (file == NULL){ printf(“Error (show_file): %s\n”, name); return; } while […]