이것은 흥미로운 형식입니다. 어떤 경우에는 라인을 읽고 배열에 적절하게 값을 추가하십시오.
입력 행 1 : 01101
일부 배열에 해당한다 : image[0][0] = 0, image[1][0] = 1 ...
이 가장 push_back()
방법을 사용하여 std::vector
으로 수행 할 수 있습니다 이것은 무슨 뜻입니다.
// 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();
코드는 테스트되지 않았지만 데이터를 올바르게 읽는 방법에 대한 대략적인 아이디어를 제공해야합니다. 이제 값이있는 형식이 지정된 2 차원 배열이 올바로 구성되었습니다 (이것이 이동을위한 것입니다). 여기에서이 값을 int
값으로 가져 와서 적절하게 변환 할 수 있습니다 (기본 16 변환은 2 진수에서 사소한 것입니다. 즉, 각 바이트는 2 자리의 16 진수입니다)
변형을 이해하지 못합니다. 처음은 어떻게 두 번째 것과 관련이 있습니까? – wallyk
(1)이 아스키 아트 또는 실제 이미지 파일입니까? (2) ASCII 아트의 시계 반대 방향 회전 만 설명하는 것입니까? – user7116
@wallyk 첫 번째 열은 첫 번째 행이되고 두 번째 열은 두 번째 행이됩니다. 나는 그 ascii 예술을 추측한다. 하지만 난 단지 16 비트 값으로 변환 할 수 있도록 그것의 8 비트 부분을 얻을 수 있어야합니다. – LiverpoolFTW