0

所以这就是我必须/必须做的。我有一个 .txt 文件,其中包含 132x72 的大图。我需要做的是将它放入十六进制值的 ac 数组中。

我需要找到一种方法来获取前 8 行的第一个字符并将它们水平放在一起,这样我就可以将它们转换为十六进制。然后我需要这样做9次。

例子:

00000
00000
11111
01010
10101
10101
01010
10101

我需要变成:

00101101
00110010
00101101
00110010
00101101

最好/最简单的方法是什么?老实说,我不知道从哪里开始。

4

2 回答 2

2

假设 1 和 0 是.txt 文件中的字符(如果是二进制文件,则需要先转换它们):只需将文件逐行读入数组即可。然后您可以大步打印数组,即首先打印字符 0、8、16、24 ...,然后打印 1、9、17、... 等等:

for (i = 0; i < ROWS; i++) {
    for (j = 0; j < COLS; j++) {
        printf("%c", chars[i + j * ROWS]);
    }
    printf("\n");
}

类似的东西。

于 2012-04-19T17:38:39.983 回答
0

这是一种有趣的格式。无论如何,读入一行,然后将值适当地添加到数组中。这就是我的意思:

输入线 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 是微不足道的 - 即每个字节都有两个十六进制数字)

于 2012-04-19T17:58:02.847 回答