我将文件的内容分配到字符串对象中。为简单起见,文件只有5个字节,即1个整数加上另一个字节的大小。 我想要做的是获取字符串对象的前四个字节,并以某种方式将其存储到程序的有效整数变量中。 然后程序将对整数进行各种操作,并对其进行更改。 之后我希望将更改的整数存储回字符串对象的前四个字节。
有人能说我能做到吗?我更愿意专门为此目的坚持使用标准C ++库。提前感谢您的帮助。
答案 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 。