如何在C++中将二进制文件上下文转换为 int/long 值

How to convert binary files context into int/long value in C++

本文关键字:转换 int long 上下文 二进制文件 C++      更新时间:2023-10-16

我正在使用fstream将值存储在二进制文件中。该值为无符号短类型。

unsigned shord value=1750; //2 byte variable
file.write((char*)&value,sizeof(value));

我的问题是我想在另一个函数中读取这个二进制文件,但它给了我一些奇怪的符号(显然是因为它是二进制的)。
有没有办法获取这两个字节并将它们转换为我的旧值 (1750) ?

这是我尝试过的:

cout <<(unsigned short)(unsigned char)(s2[8]);//s2 variable where the whole body is stored
cout <<(unsigned short)(char*)(s2[8]);

我也尝试过其他东西,但它们只是鸡抓,不值得包括在这里。

以下是您可以操作的方法(注意使用 C++11 个功能):

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void write_shorts(string filename, vector<unsigned short> shorts)
{
    ofstream f;
    f.open(filename, ofstream::trunc|ofstream::binary);
    for(auto s: shorts)
        f.write(reinterpret_cast<char*>(&s), sizeof(s));
}
auto read_shorts(string filename)
{
    ifstream f(filename);
    vector<unsigned short> res;
    short x;
    while(f.read(reinterpret_cast<char*>(&x), sizeof(x)))
        res.push_back(x);
    return res;
}
int main()
{
    // Write 3 shorts to a file
    write_shorts("myshorts", {4711, 1, 0xffff});
    // Read them back into a vector
    auto v = read_shorts("myshorts");
    cout << "Read " << v.size() << "shorts: " << endl;
    for(auto x: v)
        cout << x << endl;
}