这是一种有趣的格式。无论如何,读入一行,然后将值适当地添加到数组中。这就是我的意思:
输入线 1:01101
将对应于一些数组:image[0][0] = 0, image[1][0] = 1 ...
这可能最好std::vector
使用该push_back()
方法来完成。
// If you know the image size already
unsigned char image[NUM_ROWS][NUM_COLS/8]; // 8 bits per byte
std::ifstream file("yourfile.txt", std::ifstream::in);
// Initialize the array to 0 with memset or similar
// Read the whole file
int rows = 0;
int cols = 0;
while(!file.eof) {
std::string line;
// Get line by line
std::getline(file, line);
// Parse each line (probably better in another function)
const char* str = line.c_str();
while(str[rows] != '\0') {
unsigned val = str[rows] - '0'; // Convert to int
unsigned shift = 8 - (rows % 8); // 8 bits per byte - this is tricky big-endian or little endian?
image[rows][cols/8] |= val << shift; // Convert to int val and pack it to proper position
rows++;
}
cols++;
rows = 0;
}
file.close();
该代码未经测试,但应该让您大致了解如何正确读取数据。现在您有了一个格式正确的二维数组,其中包含您的值(这就是移位的目的)。从这里,您可以将这些值作为int
值并适当地转换它们(从二进制转换为基数 16 是微不足道的 - 即每个字节都有两个十六进制数字)