Перенос printf в некоторую переменную

#c #variables #bit

#c #переменные #бит

Вопрос:

я перенес элементы массива в printf ту строку / биты, которые мне нужно перенести в некоторую переменную, потому что мне нужно затем поработать с этим текстом / строкой (01000001 ) и преобразовать его в char (bits => char).

 //main
bool bits2[8] = {0,1,0,0,0,0,0,1};
printf("%cn", decode_byte(bits2));

//function
char decode_byte(const bool bits[8]){
  int i;

  for (i=0; i<8; i  ){
    printf("%d", bits[i]);
  }
  
  
  return 0;
}
 

Код   консоль

Комментарии:

1. Неясно, о чем вы спрашиваете. Какой результат вы хотите получить?

2. Вы хотите вернуть ‘A’, когда ваша функция декодирует {01000001}?

3. @Fawad да, я имею в виду, что .. Функция, которая возвращает ‘A’ из моего printf в консоли или из массива {01000001}

Ответ №1:

decode_byte следует просто преобразовать из двоичного представления в фактическое целое число:

 #include <stdbool.h>
#include <stdio.h>

char decode_byte(const bool bits[8]) {
    unsigned char c = 0;

    for (int i = 0; i < 8; i  ) {
        c = (c << 1) | bits2[i];
    }
    return c;
}

int main() {
    bool bits2[8] = { 0, 1, 0, 0, 0, 0, 0, 1 };
    printf("%cn", decode_byte(bits2));
    return 0;
}
 

Программа должна выводить A , который является символом ASCII, закодированным как 65 , двоичное представление которого 01000001 .

Ответ №2:

Вы ищете это?

 #include <stdio.h>

int main() {
  bool bits2[8] = { 0,1,0,0,0,0,0,1 };
  unsigned char c = 0;

  for (int i = 0; i < 8; i  )
  {
    c <<= 1;
    c |= bits2[i];
  }

  printf("xn", c);
}
 

Ответ №3:

 //function
char decode_byte(const bool bits[8]){
  int sum = 0;
  for(int i=0;i<8;i  ){
      sum  = (1<<i)*bits[7-i];
  }
  return (char)sum;
}
 

Прочитайте о таблице ascii. Когда сумма равна 65, ее преобразованное значение типа в таблице ascii равно ‘A’