读取/写入字符串对象上的整数值

时间:2010-01-28 20:12:58

标签: c++

我将文件的内容分配到字符串对象中。为简单起见,文件只有5个字节,即1个整数加上另一个字节的大小。 我想要做的是获取字符串对象的前四个字节,并以某种方式将其存储到程序的有效整数变量中。 然后程序将对整数进行各种操作,并对其进行更改。 之后我希望将更改的整数存储回字符串对象的前四个字节。

有人能说我能做到吗?我更愿意专门为此目的坚持使用标准C ++库。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

以下代码段应该说明一些事情。注意endian差异。玩弄它。试着了解发生了什么。添加一些文件操作(二进制读和写)。真正理解如何做到这一点的唯一方法是试验并创建一些测试。


#include <iostream>
#include <string>

using namespace std;

int main(int argc, char *argv[]) {
    int a = 108554107; // some random number for example sake

    char c[4];            // simulate std::string containing a binary int
    *((int *) &c[0]) = a; // use casting to copy the data

    // reassemble a into b, using indexed bytes from c
    int b = 0;
    b |= (c[3] & 0xff) << 24;
    b |= (c[2] & 0xff) << 16;
    b |= (c[1] & 0xff) << 8;
    b |= c[0] & 0xff;

    // show that all three are equivalent
    cout << "a: " << a << " b: " << b
        << " c: " << *((int *) &c[0]) << endl;

    return 0;
}

答案 1 :(得分:0)

如果从该文件读入std::string,任何零字节都会发出字符串结尾的信号,因此最终可能会有一个短于5个字节的字符串。看看here有关如何使用C ++流执行二进制I / O