1

Salut tous le monde !

Je voudrais savoir comment lire un fichier binaire avec la commande peek_bit.

@+ Neria

2

lire un fichier binaire ???
c pa plutôt avec fopen ?
avatar

3

Oui mais je voudrais le lire bit par bit

4

je ne sais pas exactement comment tu veux faire, mais pour t'aider, pour avoir l'adresse du début d'un fichier, tu fais
FILE *f;
char *adr;
f = fopen(fichier, "rb");
adr = ftell(f);
avatar

5

En fait quand je le lit il ne m'affiche que des 0 :

short Octet[8] ;
Fichier = fopen(Chemin,"rb") ;

char adresse = ftell(Fichier) ;

for ( b=8;b>0;b--)
Octet[b] = peek_bit(adresse,1) ;

for ( b=1;b<9;b++)
printf("%i",Octet[b]) ;

ngetchx() ;

NOTE : Le fichier existe et il n'est pas vide

6

ta oublié l'astérique à adresse, et pour lire tu doit mettre Octet[b] dans les for... smile
avatar

7

Si je met l'astérisque il y a un message d'avertissement "initialize makes pointer without cast", et les for sont dans les boucles : à chaque fois il y a 8 bits ( que des 0 ) qui apparaissent

8

Il y a une faute de frappe dans ton code:
peek_bit(adresse,1);
devrait être:
peek_bit(adresse,b);
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

9

Si j'ai bien compris le second argument est la position dans le fichier ?

10

ftell ne donne pas l'addresse d'un fichier en mémore neutral

il donne la position du pointeur de caractere du fichier ouvert neutral

bref aucune chance de marcher
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

11

Que dois je faire alors ?

12

les fonctions native de AMS (et ou bidouiller avec la structure de fp) permet par contre de recuperer l'addresse mémoire, mais attention, si le fichier est en ram.. cette addresse peu changer..
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

13

Que dois je faire pour obtenir cette adresse ?

14

Regarde dans les fonctions commençant par Sym (SymFind...), puis trouve le handle du fichier, puis utilises HLock dessus pour verrouiller le handle et trouver l'adresse du fichier (après, il ne faut pas oublier d'utiliser HeapUnlock pour le déverrouiller)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

15

Nan mais sinon, c possible de définir une macro get_bit qui agirait sur un nombre au lieu d'une addresse mémoire. Et puis c pas très malin d'utiliser une macro comme peek_bit qui a été faite pour je ne sais quelle raison (enfin, c p ê pour la lecture les ports) , alors qu'on peut se débrouiller pour faire ça en C standard, sans asm inline (certes, ce n'est pas aussi optimisé, mais c certainement plus propre).
EDIT: Post croisé
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

16

Tu te mets un doigt dans l'anus et tu tapes cher TIGCC je veux l'adresse du fichier.
plus compliquée :char *adresse = HeapDeref(Fichier->handle) ;Si ça ne fonctionne pas, il y a une solutionMais l'adresse peut changer en cours de route, donc le mieux est de figer le fichier avant par HeapLock(Fichier->handle) et de le libérer avant close(Fichier) avec HeapUnlock(Fichier->handle).
Y'a peut-être plus élégant.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

17

tu as oublié une étoile ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

18

Ca fait un moment que j'ai pas codé wink
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

19

Le second argument de peek_bit est la position dans le fichier, non ?

PS : J'EN AIT MARRE DE VOIR TOUS CES 0 !!!!!!!!!!!

20

peek_bit
short peek_bit (unsigned char *addr, short bit);
Fetches a bit from the memory.

Le premier argument est l'adresse de l'octet que l'on veut lire, la second est le numéro du bit dans l'octet.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

21

Merci ! Et pour passer tous les octets en revue ?

22

Quand tu arrives à la fin d'un octet tu incrémentes l'adresse.
Disons que tu parcours le fichier de gauche à droite. Le second argument commence à 7 et s'arrête à 0. Le premier argument est incrémenté de 1 unité lorsque le second passe de 0 à 7.
Tu veux un exemple pour implémenter ça ?
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

23

C'est proposer si gentiment que je ne peut refuser grin ( et puis ca m'aidera beaucoup !!! )
MERCI ! MERCI ! MERCI !

24

char *adresse;
long  i;
short bit;

adresse= HeapDeref(Fichier->handle);
i= longueur_du_fichier * sizeof(*adresse) * 8;
bit= 8*sizeof(*adresse) - 1;

while (i--)
{
  variable= peek_bit(bit ? adresse++ : adresse, bit);
  --bit&= 8*sizeof(*adresse) - 1;
  tu fais ce que tu veux avec la variable...
}
EDIT : c'est ce qu'on appelle un code incompréhensible :/ mais je préfère coder comme ça quand on a besoin de vitesse. D'ailleurs je suis pas sûr que TIGCC génère quelque chose de bon pour bit ? adresse++ : adresse, bit. Il faut peut-être l'aider.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

25

trinon

- l'ordre d'évaluation n'est pas spécifié pour les paramètres d'une fonction
- il faudrait tester si bit&7 == 0, pas si bit == 0 smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

26

Quel petit joueur grin
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

27

"bit--" n'est pas une l-value tongue

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

28

oui oui c'est bon je m'en suis rendu compte tongue
J'ai pas fais de C depuis quasiment 1 an, la dernière fois c'était à Prologin, et nitro peut confirmer que j'ai rien glandé zzz
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

29

Ca marche, c'est génial !!!!
Un seul petit problème ( et là je vais passer vraiment pour un con ) Comment obtient-on la taille d'un fichier ?

30

"--bit" non plus tonguetonguetongue

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)