Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Problema con C

  1. #1

    Problema con C

    Qualcuno sa dirmi cosa fanno queste righe di comando?

    Prende un file in input,dichiara uno short di 2 byte e lo riempe prima con il primo carattere letto dal fgetc e poi...?
    Perchè il secondo fgetc viene moltiplicato per 256?
    Su internet ho visto una tesina di un ragazzo che applicava questo codice ad una immagine e c'era anche dei pezzi dove non solo veniva moltiplicato per 256 ma successivamente per 65634 e 16000000... che tra l'altro sono i colori delle bitmap a 256,65k e 16M di colori

    unsigned short duebyte;
    duebyte=fgetc(file_in);
    duebyte+=fgetc(file_in)*256;
    return(duebyte);

    Vi prego HELP ME!!!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,130
    Se tu hai un numero di n cifre, in un qualsiasi sistema di numerazione posizionale, per avere il suo valore devi prendere ciascun simbolo e moltiplicarlo per la base elevata alla sua (posizione - 1):
    codice:
    25 = 2 * 10^1 + 5 * 10^0  (ovviamente in base 10)
    Come è noto, ciascun simbolo ha un differente valore a seconda della posizione che occupa nella rappresentazione del numero.

    Probabilmente lui intende visualizzare il valore corrispondente alla "stringa" di caratteri che ci sono dentro al file... con una piccola parentesi: i dati, nella maggior parte dei calcolatori, vengono salvati in LITTLE ENDIAN ossia capovolti. Questo significa che la lettura del valore deve essere effettuata al contrario: 25 verrebbe rappresentato come 52, di conseguenza le posizioni non vanno a scalare da sinistra verso destra, ma viceversa.

    Ma qual'è il sistema di numerazione utilizzato nei file? E' la base 255 (chiamata, comunemente, ASCII): il carattere 'A', per esempio, ha valore 65, il 'B' ha valore 66, uno spazio ha valore 32, ecc...

    Per questo, quel programma prende i primi 2 byte (che andrebbero letti al contrario) e valorizza ciascuna cifra al suo valore posizionale.

    Esempietto:
    codice:
    Stringa: AB
    
    essendo in Little Endian dovremmo leggerla al contrario: BA
    
    Questo è un valore, in ASCII: B * 256^1 + A * 256^0
    Questo è il relativo valore:
    66 * 256^1 + 65 * 256^0 =
    66 * 256 + 65 * 1 =
    16896 + 65 = 16961
    Spero di essere stato quanto più chiaro possibile ed esauriente. Il discorso sui sistemi di numerazione posizionali andrebbe, probabilmente, approfondito, ma non è questa la sede (il topic) adatta.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Grazie mille!!! Non potevi essere più chiaro di così... Te ne sono veramente grato!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.