wczytywanie do tablicy

0

napisałem program który powinien wczytywać do tablicy dane z pliku tekstowego wypełnionego liczbami zapisanymi binarnie, powinien do jednej komórki wczytywać po 4 znaki ale wczytuje po jednym co zrobiłem źle ?

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <stdlib.h>


int main(void) {

  FILE *file;
  char c[16]; /* make sure it is large enough to hold all the data! */
   int size,i;

  file = fopen("dane.txt", "r");

  if(file==NULL) {
    printf("Nie mozna otworzyc pliku.\n");
    return 1;
  }
  else {
       
    fseek (file , 0 , SEEK_END);
    size = ftell (file);
    rewind (file);  
    printf("Plik otwarty.\n");
    i=0;
    fread(c, 4, size/4, file);
    for(i=0;i<(size/4);i++)
     {
     printf(" Liczba %d to %d /n",i,(c[i]);
     }                                        
    printf("Znaki: %d \n\n", size/4);

    fclose(file);          

    system("pause");
    return 0;
  }
 }
0

Nie do końca rozumiem, co chcesz osiągnąć, ale pamiętaj, że jeden znak to 8bitów/1bajt, jeden char to właśnie 1bajt. Czyli np. taki c[0] może przechować jeden znak, a nie 4.

0

chciał bym żeby pod np. c[1] były cztery znaki 0111 jest to możliwe ?

0

Jeśli bardzo chcesz to 2 razy po 4 bity (0111) możesz upchać do jednego bajta, a następnie po wczytaniu z tablicy podzielić jeden bajt na dwie części, przesunąć każdy i w końcu będziesz miał jeden bajt (00000111) i drugi inny/taki sam, ale po co?
O wiele łatwiej jest użyć dwuwymiarowej tablicy, np.

#define ILE 32
char tablica[ILE][4];

A następnie zapisywać, np.

int ktory=0;
char znaki[4];

for(int i=0; i<4; i++){
    tablica[ktory][i]=znaki[i];
}

Co prawda wymaga więcej pamięci ale więcej pamięci zajmie kod, który napiszesz żeby zrobił to co chciałeś.

Pozdrawiam

0

dzięki za pomysł z tablicą 2D, ale wychodząc z niej nie mam pomysłu jak skonwertować to co wyjdzie w tablicy na format dziesiętny z binarnego, czy dobrym pomysłem by było uzycie strcat-a

0
finalcell napisał(a)

dzięki za pomysł z tablicą 2D, ale wychodząc z niej nie mam pomysłu jak skonwertować to co wyjdzie w tablicy na format dziesiętny z binarnego, czy dobrym pomysłem by było uzycie strcat-a

Mając taka tablice dwuwymiarową mógłbyś przepisać ich wartości dziesiętne np. tak, do tablicy intów:

int a[ilosc];
for (int i=0;i<ilosc;++i)
{
     a[i]=bity[i][0]*pow(2.0,3)+bity[i][1]*pow(2.0,2)+bity[i][2]*2+bity[i][3];
}
0

powalczyłem troche z tym i mam problem przy konwersji z bin na dec zmieniłem ciutek to co ty napisałeś ale to jest chyba to samo, z pliku do tablicy odczytuje raczej dobrze potem coś padło

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <stdlib.h>


int main(void) {

  FILE *file;
  char c[32][4];
  char a[32];
  int size,i=0,j=0;
 
  file = fopen("dane.txt", "r");

  if(file==NULL) {
    printf("Nie mozna otworzyc pliku.\n");
    return 1;
  }
  else {
       
    fseek (file , 0 , SEEK_END);
    size = ftell (file);
    rewind (file);  
    printf("Plik otwarty.\n");
      
    for(i=0;i<size/4;i++) 
    {
     for(j=0;j<4;j++)
     {
      c[i][j]=(int)fgetc(file);                
     }  
    }
    
    printf(" Po konwersji BINtoDEC ");
    for(i=0;i<size/4;++i)
    {
     a[i]=pow( (c[i][0]*2),3)+pow( (c[i][0]*2),2)+pow( (c[i][0]*2),1)+pow( (c[i][0]*2),0)+;
     printf("%d",a[i]);
    }
    
    fclose(file);          

    system("pause");
    return 0;
  }
 }

1 użytkowników online, w tym zalogowanych: 0, gości: 1