gpt4 book ai didi

c++ - 文本文件的二进制输入

转载 作者:行者123 更新时间:2023-12-01 14:37:04 25 4
gpt4 key购买 nike

Programming Principles and Practice 在第 11 章中说:“在内存中,我们可以将数字 123 表示为整数值(每个 int 占 4 个字节)或字符串值(每个字符占 1 个字节)”。

在读取二进制文本文件时,我试图了解内存中存储的内容。所以我在写 vector v的内容。

如果输入文件包含这个文本:“test these words”

输出文件显示这些数字:1953719668 1701344288 1998611827 1935962735 168626701 168626701 168626701 168626701 168626701 168626701

我尝试将“test”的每个字符转换为二进制我有 01110100 01100101 01100101 01110100如果我将其视为 4 字节的整数并将其转换为十进制,我将得到 1952802164,这与输出仍然不同。

这是如何正确完成的,以便我能够理解发生了什么?谢谢!

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cmath>
#include<sstream>
#include <fstream>
#include <iomanip>
using namespace std;

template <class T>
char *as_bytes(T &i) // treat a T as a sequence of bytes
{
void *addr = &i; // get the address of the first byte of memory used to store the object
return static_cast<char *>(addr); // treat that memory as bytes
}

int main()
{
string iname{"11.9_in.txt"};
ifstream ifs {iname,ios_base::binary}; // note: stream mode
string oname{"11.9_out.txt"};
ofstream ofs {oname,ios_base::binary}; // note: stream mode

vector<int> v;
// read from binary file:
for(int x; ifs.read(as_bytes(x),sizeof(int)); ) // note: reading bytes
v.push_back(x);

for(int x : v)
ofs << x << ' ';

}

最佳答案

假设您使用的是小端机器(例如 x86)和 ASCII 兼容字符代码(例如 Shift_JIS 和 UTF-8)。

test 表示为二进制数据的 74 65 73 74

使用小尾数法,多字节整数的高字节被放置到高地址。

因此,将 thes 作为 4 字节整数读取时,将被解释为 0x74736574,十进制为 1953719668

关于c++ - 文本文件的二进制输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63545666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com