Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Toujours dans mes traitements entre bases...

1 réponse
Avatar
Zeldus
Bonsoir à tous,

Bon, j'avance dans mon code, mais je bute toujours sur la conversion d'un
fichier texte comprenant mon code binaire "des 0 et des 1" en hexadecimal.

J'ai déjà regardé le code qu'on a été posté pour m'aider dans mon précédent
post mais j'ai l'impression qu'il n'y a pas de traitement dans ce point.

Pour faire simple, j'ouvre le fichier d'entrée et celui de sortie. Je les
mets dans les buffers respectifs, c'est la base me direz vous. Ensuite,
lorsque je lis mes 8 premiers bits dans le fichier d'entrée avec une boucle
while (j<7)... je bute sur la fonction qui pourrait me convertir ma valeur
en hexa.



void hexa(char*scrfile,char*codfile)

{
int cpt=0,pos=0,k=0,j=0,length,length2;
char * buffer;
char * buffer2;
char value[2];
int interg;
char buffer4[2];

//j'ouvre les deux fichiers source et destination
fstream In(scrfile,ios::in|ios::binary);
fstream Out(codfile,ios::out|ios::binary);

//je recupere la taille du fichier source
In.seekg (0, ios::end);
length = In.tellg();
In.seekg (0, ios::beg);

//j'alloue la memoire de la taille du fichier
buffer = new char [length];

//je met tout le fichier dans le buffer
In.read (buffer,length);
In.close();

//j'alloue la memoire de la taille du fichier sortie
length2 = length;
buffer2 = new char [length2];

while(k<length)
{
j=0;
char buffer3[7];
while(j<7)
{
if (buffer[k]=='0') buffer3[j]=0;
if (buffer[k]=='1') buffer3[j]=1;
k++;
j++;
}
interg=int(buffer3);
itoa(interg,value,16);

buffer2[pos]=value;
pos++;

}
}

Si quelqu'un sait comment faire ma conversion des bits 8 par 8 en hexa dans
la boucle, je sais que ça doit sembler tout bête mais y a une fonction qui
doit exister et que je ne saisis pas. J'ai bien essayé itoa() mais ça me
donne toujours la même valeur.

Par avance, merci,

Zeldus

1 réponse

Avatar
Doms
Bonjour,

HS car pas c++.

//j'alloue la memoire de la taille du fichier sortie
length2 = length;
buffer2 = new char [length2];

while(k<length)
{
j=0;
char buffer3[7];
while(j<7)


Pourquoi 7 ? C'est pas du 8 bits mais de l'ascii7 ?
de 0 à 6 inclus, y'a que 7 itération la.

{
if (buffer[k]=='0') buffer3[j]=0;
if (buffer[k]=='1') buffer3[j]=1;
k++;
j++;
}
interg=int(buffer3);
itoa(interg,value,16);


Moi j'aurais plutot fait le calcul a la main

int val = 0;
for( j = 0; k<length && j < 8; j++ )
{
if ( buffer[k] == '0' )
{
// simple décallage
val = val << 1; // ou val = val * 2
}
else
{
// on considere le fichier d'entree comme correct donc ici c'est
1 !
val = (int)(val << 1 | 0x01);
}
k++;
}


Voila, j'espere ne pas avoir ecrit de trop grosse connerie. C'etait
juste pour
donner l'idée de comment je le ferait. Il faut aussi faire attention
avec la gestion
des signes. Donc a largement ameliorer (surtout que j'ai pas de compilo
sous la
main pour tester ca et que je joue pas au niveau bit tous les jours).
Faut
aussi gerer la fin du buffer dans la boucle ce qui n'etait pas le cas
dans le
code posté (ni dans le mien).

Mes 2,5 euros. Doms.