下载链接中的图片文件,以二进制方式打开并读取该文件中的第 10(从0开始计数,后同), 23, 80 个字节处的值,求这3个二进制数按位异或的结果(10进制表示)。
戳我下载
请输入异或结果(10进制):
#include <iostream> #include <fstream> using namespace std; int main() { //测试代码,可见只有char和bool类型的变量是只占1个字节的 /* cout << "sizeof(int) = " << sizeof(int) << endl; cout << "sizeof(float) = " << sizeof(float) << endl; cout << "sizeof(double) = " << sizeof(double) << endl; cout << "sizeof(char) = " << sizeof(char) << endl; cout << "sizeof(bool) = " << sizeof(bool) << endl; cout << "sizeof(char*) = " << sizeof(char*) << endl; cout << "sizeof(int*) = " << sizeof(int*) << endl; cout << "sizeof(float*) = " << sizeof(float*) << endl; cout << "sizeof(double*) = " << sizeof(double*) << endl; */ ifstream fin("scene.jpg", ios::binary); char binary_num[3] = {0}; int count = 0; //读取第10、23、80字节处的二进制数,由于从0开始计数,所以if语句中count要减1 while(fin) { char data; fin.read((char*) &data, sizeof(data)); count++; if(count - 1 == 10) binary_num[0] = data; if(count - 1 == 23) binary_num[1] = data; if(count - 1 == 80) { binary_num[2] = data; break; } } //测试代码 for(int i = 0; i < 3; i++) cout << "binary_sum[" << i << "] = " << (int)binary_num[i] << endl; //char result = binary_num[0]; char result = 0; // 0与任何数按位异或都等于任何数,这样写更科学也更美观 for(int i = 0; i < 3; i++) result ^= binary_num[i]; cout << "result = " << (int)result << endl; return 0; }第一大段测试代码的运行结果:(非常重要!可以作为Dev Cpp的重要资料留存,是以后直接对计算机底层进行操作、对内存操作的依据。)
如果count不减1,结果是71,错误原因是count实际上从1开始计数;减1就从0开始计数,结果是66。