我正在学习 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++。任何帮助将不胜感激。
非常感谢,
马可
在 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文件?
尽管很简单,但我找不到重复的问题。
我正在尝试编写一个生成随机数的脚本,然后将这些数字转换为 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) 每次我.php在 Sublime 中保存文件时都会弹出:
在 { "php_bin":"/usr/local/bin/php" } 处找不到 PHP 二进制文件
我已经做了我所知道的一切,到目前为止我正在研究答案。
我有三个用于特定内存地址的二进制文件,我想将它们与srec_cat用 0xFF 填充漏洞结合起来。
内存映射
\n\n|- pad w/ 0xFF -|- *bootloader* ~~~ pad w/ 0xFF -|- *conf* ~~~ pad w/ 0xFF -| - *app* ~~~|\n0 0x1000 0x8000 0x10000\nRun Code Online (Sandbox Code Playgroud)\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
我正在尝试在 Swift 中将浮点的连续数组转换为字节数组,但在不使用 for 循环的情况下无法找到明智的方法。我一直在关注以前的帖子,例如How to conversion a double into a byte array in swift? ,但如果不逐一迭代获取每个元素,我无法检索数组的内容。
有没有一种优雅的方法可以直接将 ContigouslyArray 的字节“复制”到字节数组?
PS:我已经成功实现了将结构转换为字节数组,但无法对数组执行相同的操作。
我有一个程序集(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 或类似的)?我希望保持二进制文件原样。
我想创建一个简单的 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) 我有二进制文件,每次包含每个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) 我正在阅读使用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.请有人解释发生了什么!