标签: binaryfiles

C++ 以二进制模式读取文件。文件结尾问题

我正在学习 C++,我必须以二进制模式读取文件。我的做法如下(遵循 C++ 参考):

unsigned values[255];
unsigned total;
ifstream in ("test.txt", ifstream::binary);

while(in.good()){
    unsigned val = in.get();
    if(in.good()){
        values[val]++;
        total++;
        cout << val <<endl;
    }
}

in.close();
Run Code Online (Sandbox Code Playgroud)

所以,我正在逐字节读取文件,直到in.good()为真。我cout在末尾添加了一些内容,while以便了解发生了什么,这是输出:

marco@iceland:~/workspace/huffman$ ./main 
97
97
97
97
10
98
98
10
99
99
99
99
10
100
100
10
101
101
10
221497852
marco@iceland:~/workspace/huffman$
Run Code Online (Sandbox Code Playgroud)

现在,输入文件“test.txt”只是:

aaaa
bb
cccc
dd
ee
Run Code Online (Sandbox Code Playgroud)

所以一切都很完美,直到最后,也就是 221497852。我猜这是关于文件末尾的问题,但我无法找出问题所在。

我在 debian 机器(64 位)上使用 gedit 和 g++。任何帮助将不胜感激。

非常感谢,

马可

c++ linux io binaryfiles

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

以二进制方式将字母 A 写入文件

在 Python 3 中,这些陈述是正确的:

ord('A') == 65
chr(65) == 'A'
bin(65) == '0b1000001'
hex(65) == '0x41'
int(b'1000001',2) == 65
Run Code Online (Sandbox Code Playgroud)

给定整数i = 65,如何在Python 3中以二进制模式打开文件并将字节写入01000001文件?

尽管很简单,但我找不到重复的问题。

python binaryfiles python-3.x

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

将字节数组写入二进制文件 Javascript

我正在尝试编写一个生成随机数的脚本,然后将这些数字转换为 4 字节组,然后将这些 4 字节组放入 Uint8Array 最后,我尝试将数组保存到二进制文件。这是我的代码:

<html>
<head>
<title>Raandom Number Generator</title>
</head>
<body>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="filesaver.min.js"></script>
<script type="text/javascript">
    $(function() {
        if (!Date.now) {
            Date.now = function() {
                return new Date().getTime();
            };
        }

        alert("started");
        var currentMousePos = {
            x : -1,
            y : -1
        };
        var randomData = [];
        var bytes = new Int8Array(4);

        $(document).mousemove(function(event) {

            if(randomData.length>=1231){
                $(document).unbind('mousemove');
                console.log("Finished generating numbers ... trying to save file");
                randomData = new Uint8Array(randomData);
                var blob = new Blob(randomData, {type: "application/octet-stream"});
                saveAs(blob, "rand.bin"); …
Run Code Online (Sandbox Code Playgroud)

javascript binaryfiles binary-data

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

找不到 PHP 二进制文件

每次我.php在 Sublime 中保存文件时都会弹出:

在 { "php_bin":"/usr/local/bin/php" } 处找不到 PHP 二进制文件

我已经做了我所知道的一切,到目前为止我正在研究答案。

php binaryfiles

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

使用 srec_cat 连接三个二进制文件并填补漏洞

我有三个用于特定内存地址的二进制文件,我想将它们与srec_cat用 0xFF 填充漏洞结合起来。

\n\n
    \n
  • bootloader.bin \xe2\x80\x94> 0x1000
  • \n
  • conf.bin \xe2\x80\x94> 0x8000
  • \n
  • 应用程序.bin \xe2\x80\x94> 0x10000
  • \n
\n\n

内存映射

\n\n
|- pad w/ 0xFF -|- *bootloader* ~~~ pad w/ 0xFF -|- *conf* ~~~ pad w/ 0xFF -| - *app* ~~~|\n0            0x1000                           0x8000                    0x10000\n
Run Code Online (Sandbox Code Playgroud)\n\n

~~~表示“流动”边界,即其左侧的二进制文件没有固定大小。

\n\n

CLI 参数

\n\n

我在http://srecord.sourceforge.net/man/man1/srec_examples.html#BINARY%20FILES上读到的\xe2\x88\x92fill,-binary和选项之间有点迷失。有没有办法告诉填充 0x1000 和 0x8000 之间未被占用的任何内容(无论 .bin 实际有多大)?-offsetsrec_catbootloader.bin

\n

embedded binaryfiles srec-cat

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

如何在 Swift 中将浮点数的连续数组转换为字节数组?

我正在尝试在 Swift 中将浮点的连续数组转换为字节数组,但在不使用 for 循环的情况下无法找到明智的方法。我一直在关注以前的帖子,例如How to conversion a double into a byte array in swift? ,但如果不逐一迭代获取每个元素,我无法检索数组的内容。

有没有一种优雅的方法可以直接将 ContigouslyArray 的字节“复制”到字节数组?

PS:我已经成功实现了将结构转换为字节数组,但无法对数组执行相同的操作。

arrays serialization binaryfiles swift

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

在 QEMU 中加载并运行具有 32 位代码的原始二进制文件

我有一个程序集(NASM)文件:

bits 32
start:
    mov dword [0xb8000], 0x2f4b2f4f
    hlt
Run Code Online (Sandbox Code Playgroud)

这会生成一个二进制文件,其中包含:

C7 05 00 80 0B 00 4F 2F 4B 2F F4
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在 QEMU 中执行此二进制文件中的代码,而无需更改代码且无需添加标头(如 Multiboot 或类似的)?我希望保持二进制文件原样。

x86 assembly binaryfiles qemu nasm

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

写入二进制文件结构会添加 0

我想创建一个简单的 BMP 并保存它。因为我不想让事情变得复杂,所以我决定遵循示例 1中的示例,只更改所需的内容,例如宽度和类似的内容。

我将其保存BMP_header在以下结构中:

typedef struct{

    unsigned short file_type; // hex for "BM"
    unsigned int file_size;
    unsigned int empty_space; // empty space always 0x0
    unsigned int offset; // always 0x36000000

}BMP_header;

Run Code Online (Sandbox Code Playgroud)

我还创建了一个初始化一个结构的函数:

BMP_header* BMP_header_init(unsigned int bmp_data){

    BMP_header* coppy = (BMP_header*)malloc(sizeof(BMP_header));

    coppy->file_type = 0x4d42;
    coppy->file_size = (54 + bmp_data) << 24;
    coppy->empty_space = 0;
    coppy->offset = 0x36000000;

    return coppy;

}
Run Code Online (Sandbox Code Playgroud)

要将标头写入文件,我尝试了传统方法

fwrite(header, sizeof(*header), 1, f);
Run Code Online (Sandbox Code Playgroud)

标题是BMP_header_init结果。问题是我的预期输出与我的预期不符,只是无缘无故地添加了 0。我尝试写入该字段的每个字段,认为来自无符号短字段的填充将是原因。

预期输出应该是(没有空格):

42 4D 46 00 …
Run Code Online (Sandbox Code Playgroud)

c binaryfiles bmp

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

以正确的方式从二进制文件中提取存储的png图像

我有二进制文件,每次包含每个PNG文件(二进制文件不是DLL,不是EXE,没什么常见的,只是包含不同文本信息的文件,PNG文件和其他一些东西.格式文件对我来说是未知的.PNG文件可以显示一个执行此类文件的程序).我没有这个程序的来源做这些文件.我的任务是从二进制文件中提取此PNG文件以显示它或将其保存为PNG.我写了一个代码,它可以处理这些文件中的一部分(比如大约50%的文件),但不是.在不工作的文件上,创建此文件的程序仍然可以显示包含的图像,因此图像在每个文件内部确实有效 - 但无论如何我的代码对某些文件不起作用.

有些图像似乎可能有另一种格式,可能是编码类型(我已尝试过所有不同的编码类型,没有成功).这是我的代码(我希望有人可以告诉我改变什么,图像变得可读).

我的代码是什么:它找到PNG图像"‰PNG"的已知起始字符串和已知的结束字符串"IEND®B`".这个字符串在我的任何二进制文件中都包含PNG.然后我的代码获取开始和结束之间的字符串+开始和结束序列,并使用Encoding.Default将其保存到文件中.大多数通过这种方式提取的PNG文件可以使用图像查看器显示,但大约50%是无效的.如果我用编辑器打开它并将字符与工作图像进行比较,则图像看起来没问题.Sofar我不知道哪个符号是错误图像格式的原因.

如果需要我会提供更多信息,这里是我的代码:

private void button2_Click(object sender, EventArgs e)
    {
        string ReadFile1 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "file.dat");
        string WriteFile1 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "test.png");
        string TMP = File.ReadAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), ReadFile1), Encoding.Default); //System.Text.Encoding.GetEncoding(1251)
        int start1 = TMP.IndexOf("PNG", 0 ,StringComparison.Ordinal);
        if (start1 == 0) { return; }
        int end1 = TMP.IndexOf("IEND", StringComparison.Ordinal);
        string PNG = TMP.Substring(start1 - 1, (end1 + 9) - start1);
        File.WriteAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "test.png"), PNG, Encoding.Default);
    }
Run Code Online (Sandbox Code Playgroud)

我还首先考虑使用二进制方法获取PNG并使用此代码,但我只是读取字符串时得到了完全相同的结果.这是我早期的代码.我使用字符串来搜索字节数组中的位置进行比较.我对二进制代码没有运气...

 byte[] by;
        // 1.
        // Open file with a BinaryReader.
        using (BinaryReader b = new …
Run Code Online (Sandbox Code Playgroud)

c# binary png binaryfiles binary-data

2
推荐指数
2
解决办法
4766
查看次数

为什么istreambuf_iterator没有提前工作

我正在阅读使用istream_iterators构造一个向量,这个向量是将一个完整的文件内容读入一个字符向量中.虽然我想将文件的一部分加载到字符向量中.

#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <algorithm>

using namespace std;

int main(int argc, char *argv[])
{
    ifstream ifs(argv[1], ios::binary);
    istreambuf_iterator<char> beginItr(ifs);
    istreambuf_iterator<char> endItr(beginItr);
    advance(endItr, 4);
    vector<char> data(beginItr, endItr);
    for_each(data.cbegin(), data.cend(), [](char ch)
    {
            cout << ch << endl;
    });
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为提前不起作用,而上述问题的接受答案有效.为什么不提前工作istreambuf_iterator?

也

  endItr++;
  endItr++;
  endItr++;
  endItr++;
  cout << distance(beginItr, endItr) << endl;
Run Code Online (Sandbox Code Playgroud)

返回0.请有人解释发生了什么!

c++ iterator binaryfiles istream-iterator ifstream

2
推荐指数
1
解决办法
859
查看次数