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

C++ 如何在C+中将二进制文件上下文转换为int/long值+;,c++,binary,fstream,ifstream,ofstream,C++,Binary,Fstream,Ifstream,Ofstream,我用fstream将一个值存储在一个二进制文件中。该值为无符号短类型 unsigned shord value=1750; //2 byte variable file.write((char*)&value,sizeof(value)); 我的问题是我想在另一个函数中读取这个二进制文件,但它给了我一些奇怪的符号(显然是因为它是二进制的)。 有没有办法获取这两个字节并将它们转换为我的旧值(1750) 以下是我尝试过的: cout <<(unsigned short)(uns

我用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]);

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

#包括
#包括
#包括
使用名称空间std;
void write_shorts(字符串文件名、向量shorts)
{
流f;
f、 打开(文件名,ofstream::trunc | ofstream::binary);
用于(自动s:短路)
f、 写入(重新解释铸件),尺寸(s));
}
自动读取(字符串文件名)
{
iff流(文件名);
向量res;
短x;
而(f.read(reinterpret_cast(&x),sizeof(x)))
res.push_back(x);
返回res;
}
int main()
{
//将3条短裤写入一个文件
写一篇短文(“myshorts”,{4711,1,0xffff});
//把它们读回向量
自动v=阅读短片(“myshorts”);

CUT是否使用<代码>文件读取这些值?读((char *)和value,sieof(value));< /代码>?C++中不使用C样式的c++。你到底是什么意思?嘿,π-π,To-α,r,ε,我也是希腊人。你能给我一封私人信件来联系你吗?和值<代码>在C++中。正确的C++强制转换有<代码> RealTytCype(和值)“C++”有很多不同的CAST操作,而C风格的CAST可以表示它们中的任何一种,如果使用不同的类型,那么就可能带来灾难性后果。@ NelsNeTexeRea,我怀疑问题是由DeaNess引起的,除非文件是在不同机器上生成的,具有不同的架构。
#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;
}