标签: binaryfiles

在C++字符串中使用二进制数据

我正在处理来自服务提供商的二进制数据.我使用C++通过HTTP请求订阅这些数据.我不时地从这个提供者那里得到一个HTML有效载荷.HTML有效负载实际上是二进制数据,看起来像这样:

! ¦ô¿Âˤ ÍÌL? Àÿ Àÿ¥ š™©@ Àÿ Àÿ 要么 ! H·ô¿Âˤ ÍÌL? Àÿ333?¥ š™©@ Àÿff¦@

我想使用我得到的数据进行模拟.为此,我在字符串中硬编码数据并启动将使用这些字符串的程序.

std::string input = "! ¦ô¿Âˤ ÍÌL? Àÿ Àÿ¥ š™©@ Àÿ Àÿ"

我的第一个问题是我必须逃避所有的角色\n.但我不知道如何逃避\0.此外,我有此错误消息,这可能是由于我没有正确地逃避文件结束字符的事实:

Error 3 fatal error C1004: unexpected end-of-file found

所以主要的问题是:文件结尾字符是什么样的,我怎么能逃脱呢?

然后,是否有一个linux命令或从二进制文件中获取二进制数据的方法,然后转义所有特殊字符,\然后我只是将其粘贴到我的C++代码中.

最后,我想将所有不同的有效负载放在二进制文件中,这样我就可以使用这个文件启动我的模拟了.问题是我不知道如何分离不同的有效载荷,因为只是进入下一行不会起作用,因为它将被解释为随机字符(并且有效载荷没有固定大小) .我不知道使用什么样的分隔符.

c++ binary binaryfiles

7
推荐指数
1
解决办法
5845
查看次数

xor每个字节为0x71

我需要从文件中读取一个字节,然后用0x71读取它并将其写回另一个文件.但是,当我使用以下内容时,它只是将字节作为字符串读取,因此xoring会产生问题.

f = open('a.out', 'r')
f.read(1)
Run Code Online (Sandbox Code Playgroud)

所以我最后在C中做了同样的事情.

#include <stdio.h>
int main() {
  char buffer[1] = {0};
  FILE *fp = fopen("blah", "rb");
  FILE *gp = fopen("a.out", "wb");
  if(fp==NULL) printf("ERROR OPENING FILE\n");
  int rc;
  while((rc = fgetc(fp))!=EOF) {
    printf("%x", rc ^ 0x71);
    fputc(rc ^ 0x71, gp);
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

有人能告诉我如何将我使用的字符串转换f.read()为十六进制值,以便我可以将其与0x71进行xor并随后将其写入文件?

python hex binaryfiles

7
推荐指数
1
解决办法
3万
查看次数

如何将Mathematica二进制转储文件转换为定义列表?

正如文档所说," DumpSave以二进制格式写出定义,这些格式针对Mathematica的输入进行了优化." 有没有办法将Mathematica二进制转储文件转换回定义列表而不评估它们?Import["file.mx","HeldExpression"]不起作用......

wolfram-mathematica dump binaryfiles binary-data

7
推荐指数
1
解决办法
1417
查看次数

MongoDB GridFS上的全文搜索?

比如,如果我想使用MongoDB的GridFS存储PDF或ePub文件,是否可以对数据文件执行全文搜索?

full-text-search binaryfiles binary-data mongodb nosql

7
推荐指数
1
解决办法
4451
查看次数

在TFS源代码管理中更新二进制文件

所以我决定将我引用的第三方dll添加到一个名为lib的单独文件夹中的源代码控制,然后从所述目录中引用它们.

这很好用,但是当我想更新文件时,TFS似乎完全忘记了文件实际已经改变的事实.即使我复制旧文件,也似乎无法检查新文件.如果我从源代码管理资源管理器中选择签入挂起的更改,我会收到一个信息框,说明没有更改.但是,如果我在最新版本和工作区版本之间运行比较单个DLL,TFS会告诉我文件确实不同.

那么从源代码控制中删除文件然后重新添加它们作为新版本的唯一解决方案,还是我可以以某种方式更新它们?

version-control tfs binaryfiles

7
推荐指数
1
解决办法
3090
查看次数

为什么动态二进制翻译比静态二进制翻译更实用?

当谈到二进制翻译(Recompilation)时,我总是听说动态二进制翻译通常是静态二进制翻译的一个更好的替代方法,但我似乎无法理解为什么在这背后.为什么总是认为静态二进制转换在仿真中无法实现?为什么动态二进制翻译总是被认为更实用?

通常人们会将此与JIT(即时)和静态编译之间的关系进行比较,但这种比较常常让我感到困惑,因为它们都不仅仅是实际的实现.

c compiler-construction assembly binaryfiles

7
推荐指数
1
解决办法
2509
查看次数

Python中的无服务器并发写访问

Python中是否有任何使用无服务器架构支持NFS 并发写入的软件包?

我在一个拥有超级计算机的环境中工作,多个作业并行保存数据.虽然我可以将这些计算的结果保存在单独的文件中,并在以后合并它们的结果,但这需要我编写一个读者,它知道我在计算机中分割计算的具体方式,以便它知道如何拼接所有内容在最终的数据结构中正确.

上次我检查过SQLite不支持NFS中的并发性.SQLite还有其他选择吗?

注意:无服务器是指避免显式启动处理IO请求的另一台服务器(在NFS之上).我知道NFS使用客户端 - 服务器架构,但是这个文件系统已经是我使用的超级计算机的一部分.我不需要保持自己.我正在寻找的是支持并发IO的包或文件格式,而无需我设置任何(附加)服务器.

例:

以下是我将并行运行的两个作业的示例:

  • 作业1my_dict从头开始填充以下数据,并将其保存到file:

    my_dict{'a'}{'foo'} = [0.2, 0.3, 0.4]

  • 作业2my_dict从头开始填充以下数据,并将其保存到file:

    my_dict{'a'}{'bar'} = [0.1, 0.2]

我想稍后加载file,并在以下内容中看到以下内容my_dict:

> my_dict{'a'}.items()
[('foo', [0.2, 0.3, 0.4]), ('bar', [2, 3, 5])]
Run Code Online (Sandbox Code Playgroud)

请注意,拼接操作是自动的.在这种特殊情况下,我选择my_dict['a']在计算中拆分键,但其他拆分也是可能的.根本的想法是工作之间没有冲突.它隐含地假设作业添加/聚合数据,因此字典的融合(如果使用Pandas,数据帧)总是导致聚合数据,即计算数据的"外部联接".

python hpc binaryfiles

7
推荐指数
1
解决办法
173
查看次数

从C静态库中删除内部符号

我正在研究一些作为静态库提供的嵌入式代码.我们希望从库中删除所有内部符号,并仅保留API符号可见.

这是我们想要做的一个例子:假设你有一个被调用的文件internal.c和一个被调用的文件api.c:

/* internal.c */

int fibonacci(int n)
{
    /* Compute the nth Fibonacci number and return it */
}


/* api.c */

#include "internal.h"
#include <stdio.h>

void print_fibonacci(n)
{
    printf("Fibonacci(%d): %d\n", n, fibonacci(n));
}
Run Code Online (Sandbox Code Playgroud)

用户应该只能访问该print_fibonacci功能,而所有内部符号(如fibonacci功能)应在发货前解决.这意味着用户应该能够定义自己的函数,fibonacci而不必担心与库的冲突.

我们已经尝试使用内部链接ld --relocatable,但我们似乎无法使用objcopy删除符号.这有可行吗?

谢谢您的帮助!

编辑:用户定义的fibonacci函数不应该替换库定义的函数,它们应该只能共存.基本上我正在寻找解决命名冲突的解决方案.

c linker binaryfiles static-libraries

7
推荐指数
1
解决办法
1678
查看次数

计算机如何将一切翻译成二进制?当他们看到二进制代码时,他们如何知道它是代表数字还是单词或指令?

我知道计算机如何将数字转换为二进制.但我不明白的是,我听说计算机将所有内容(文字,说明,......)翻译成二进制文件,而不仅仅是数字.这怎么可能?

你能告诉我一些例子吗?就像计算机如何将字母"A"翻译成二进制文件一样?

当计算机看到二进制代码时,他们如何知道0和1的长字符串是表示数字还是单词或指令?

.

例:

假设计算机程序员编码字母"Z",以便将其转换为此二进制字符串:11011001111011010111

因此,当计算机遇到这个二进制字符串时,它会将其转换为字母"Z".

但是当我们问这台电脑"到1259年709的产品是什么?"时会发生什么?

电脑会回答我们"892631".但是,当转换为二进制时,该数字是11011001111011010111.

那么它如何在"Z"和"892631"之间产生影响呢?

.

请注意,我对计算机科学知之甚少,所以请用简单的术语解释一切.

binary computer-science binaryfiles binary-data computer-architecture

7
推荐指数
3
解决办法
1万
查看次数

BMP文件行填充问题

所以我试图用C++代码导出一个.bmp文件,除了一个主要的东西之外我还有它工作:行填充.我不是100%肯定线填充的工作原理,但我知道我需要它.我的算法工作除了填充,我在十六进制编辑器中手动添加填充到我导出的图像,它工作.但是我该如何添加填充?这是我有的:

//Size of the file in bytes
    int fileSize = 54 + (3 * width * height);

    //The sections of the file
    unsigned char generalHeader[14] = {'B','M',0,0, 0,0,0,0, 0,0,54,0, 0,0};
    unsigned char DIBHeader[40]     = {40,0,0,0, 0,0,0,0, 0,0,0,0, 1,0,24,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0};
    unsigned char pixelArray[1000000];
    unsigned char bmpPad[3] = {0, 0, 0};

    //Set the binary portion of the generalHeader, mainly just file size
    generalHeader[2] = (unsigned char)(fileSize);
    generalHeader[3] = (unsigned char)(fileSize >> 8);
    generalHeader[4] = (unsigned char)(fileSize >> …
Run Code Online (Sandbox Code Playgroud)

c++ binaryfiles bmp

7
推荐指数
1
解决办法
3277
查看次数