簡體   English   中英

如何使水平矩陣垂直?

[英]How to turn a horizontal matrix vertical?

我正在根據輸入的字符將特定的十六進制轉換為十進制,然后轉換為二進制。 我正在嘗試以輸入字符的形狀打印1和0的矩陣。 當我打印第一個字符時,它會橫向輸出。 如何將其垂直放置?

我試圖找到一種方法,僅在行的一列上打印每個二進制文件的第一位,在列的第二行上打印第二位,依此類推,但是沒有任何結果。 該代碼要求使用帶有所有十六進制的外部文件。 從文件中提取時,A的十六進制為十進制形式:126、17、17、17、126。然后將它們轉換為二進制整數:01111110、00010001、00010001、00010001和01111110。 5x7矩陣。 它應該產生一個垂直的A,但是會產生一個水平的A。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "font5x7.h"

void DecToBin (int newBin[], char userMessage[], int k) {
int i = 0;
int j = 0;
int m = 0;

for (i = 0; i < 1; ++i) {
    while (m < 8) {
    newBin[j] = Font5x7[k] % 2;
    Font5x7[k] = Font5x7[k] / 2;
    ++j;
    ++m;
    }
}
}

int main (void) {

const int INPUT_STR_SIZE = 40;
char userMessage[INPUT_STR_SIZE];
int i = 0;
int j = 0;
int k = 0;

const int BIN_MAX = 8;
int binNum[BIN_MAX];

printf("Enter message:\n");
fgets(userMessage, INPUT_STR_SIZE, stdin);



//Iterate through DecToBin function for bin equivalents
for (i = 0; i < strlen(userMessage); ++i) {
    if (userMessage[i] == 'A') {
        for (k = 165; k < 170; ++k) {
            DecToBin(binNum, userMessage, k);
                for (j = 7; j >= 0; --j) {
                    printf("%d", binNum[j]);
                }
                    printf("\n");
        }
    }
}






return 0;

}

如果我很好地理解了像素126、17、17、17、126中的水平A:

01111110
00010001
00010001
00010001
01111110

必須產生一個垂直的A向左轉(此處未缺少0):

01110
10001
10001
10001
11111
10001
10001
00000

這意味着:(高位是數組中的索引,低位是位)

07 06 05 04 03 02 01 00
17 16 15 14 13 12 11 10
27 26 25 24 23 22 21 20
...
n7 n6 n5 n4 n3 n2 n1 n0

必須生產

00 10 20 30 .. n0
01 11 21 31 .. n1
02 12 22 32 .. n2
...
07 17 27 37 .. n7

這樣做的建議:

#include <stdio.h>
#include <string.h>

void turnLeft(const unsigned char * v, unsigned char r[8], size_t sz)
{
  memset(r, 0, sizeof(r));

  size_t j = 0;

  for (unsigned m = 1; m != (1 << 8); m <<= 1) {
    for (size_t i = 0; (i != sz) && (i != 8); ++i) {
      if (v[i] & m)
        r[j] |= (1 << (7 - i));
    }
    j += 1;
  }
}

void pr(const unsigned char * v, size_t sz)
{
  for (size_t i = 0; i != sz; ++i) {
    unsigned char c = v[i];

    for (unsigned m = (1 << 7); m != 0; m >>= 1)
      putchar('0' + ((c & m) != 0));

    putchar('\n');
  }
}

int main()
{
  const unsigned char v[] = { 126, 17, 17, 17, 126 };
  unsigned char r[8];

  pr(v, sizeof(v));
  putchar('\n');

  turnLeft(v, r, sizeof(v));
  pr(r, 8);
}

編譯執行:

vxl15036 /tmp % gcc -std=c99 -pedantic -Wextra a.c
vxl15036 /tmp % ./a.out
01111110
00010001
00010001
00010001
01111110

01110000
10001000
10001000
10001000
11111000
10001000
10001000
00000000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM