二进制文件读写和加密

Posted by SlothSimon's Skytree on January 18, 2017

入职后第一件工作用到了二进制和加密,做个笔记记录下坑。

1

unsigned char buf[contentSize];  // contentSize为待读取内容的字节数

rfile.read(buf, contentSize);    // rfile为ifstream类型,以二进制方式打开

cout << buf << endl;

上面的buf在读取1KB的文件时工作的很好,但是尝试用65KB的文件后,就出现了明明contentSize是对的,但是只读了几十个字节的情况,打印出来也是乱码,原因不明,遂改为下面的代码,虽然强制把const转为非const是不太安全的做法。

string buf;  
buf.resize(contentSize, 0x00);
// 严格来说按照C++语法应当使用const_cast进行类型转换

rfile.read((char *)buf.c_str(), contentSize);    
cout << buf << endl;

2

openssl des 加解密和8字节补齐参考代码

3

声明结构体时,没有声明构造函数,于是在类似如下的循环里,局部变量里面的值并没有被初始化而是保留着上一次循环时的值。

for (int i = 0; i < 10; i++){
    somestruct tmp;             // somestruct是自定义的结构体

    rfile.read(&tmp, sizeof(tmp));  // rfile为ifstream类型,以二进制方式打开

}

rfile.read没有读到任何信息时,tmp虽然是个局部变量,但依然保留着上次循环的值,于是造成了“读到了内容”的假象。原因待google,开发环境是VS2008,win7-64bit。