À l'aide de fread() pour lire un fichier de texte dans un tampon - pourquoi les valeurs dans la mémoire tampon pas de chaque personnage respectif valeur ASCII?

Tout d'abord, ce n'est pas de devoirs. Juste essayer de comprendre pourquoi je vais voir ce que je vois sur mon écran.

Les trucs ci-dessous (mon propre travail) prend actuellement un fichier d'entrée et le lit dans un fichier binaire. Je le veux pour stocker chaque octet lu dans un tableau (pour plus tard). Par souci de concision, le fichier d'entrée Hello.txt) contient simplement 'Bonjour le Monde', sans les apostrophes.

int main(int argc, char *argv[]) {

    FILE *input;
    int i, size;
    int *array;

    input = fopen("Hello.txt", "rb");
    if (input == NULL) {
        perror("Invalid file specified.");
        exit(-1);
    }

    fseek(input, 0, SEEK_END);
    size = ftell(input);
    fseek(input, 0, SEEK_SET);

    array = (int*) malloc(size * sizeof(int));
    if (array == NULL) {
        perror("Could not allocate array.");
        exit(-1);
    }
    else {
        input = fopen("Hello.txt", "rb");
        fread(array, sizeof(int), size, input);
        //some check on return value of fread?
        fclose(input);
    }

    for (i = 0; i < size; i++) {
        printf("array[%d] == %d\n", i, array[i]);
    }

Pourquoi est-ce que le fait d'avoir l'impression d'instruction dans la boucle for comme il est ci-dessus les causes de la sortie de ressembler à ce

array[0] == 1819043144
array[1] == 1867980911
array[2] == 6581362
array[3] == 0
array[4] == 0
array[5] == 0
array[6] == 0
array[7] == 0
array[8] == 0
array[9] == 0
array[10] == 0

tout en ayant comme ça

printf("array[%d] == %d\n", i, ((char *)array)[i]);

rend la sortie ressemble à ceci (décimal valeur ASCII de chaque caractère)

array[0] == 72
array[1] == 101
array[2] == 108
array[3] == 108
array[4] == 111
array[5] == 32
array[6] == 87
array[7] == 111
array[8] == 114
array[9] == 108
array[10] == 100

? Si je suis en train de lire comme un fichier binaire et que vous voulez lire octet par octet, pourquoi ne reçois-je pas le droit, valeur ASCII à l'aide de l'impression de la première déclaration?

Sur une note connexe, ce qui se produit si le fichier d'entrée j'envoie n'est pas un document texte (par exemple, jpeg)?

Est désolé c'est tout à fait trivial, mais je n'arrive pas à comprendre pourquoi.

  • Pourquoi êtes-vous de l'ouverture du fichier d'entrée deux fois?
  • Parce que je viens de remarquer que j'ai fait aaaaand je l'ai supprimé. Merci!
InformationsquelleAutor user2809475 | 2013-09-24