passer de 8 octetcs à 1 octet - C - Programmation
Marsh Posté le 01-06-2006 à 23:07:17
pkoi la condition de ta boucle porte sur octe et non sur count?
je sais pas moi mais :
Code :
|
pour l'affichage, de res, tu choisis !
bon je l'ai mis en BYTE, mais cest peut etre char, ca je sais pas!
@pluch
Marsh Posté le 01-06-2006 à 23:12:37
oups...
bien sur :
- g est un FILE* et il a ete ouvert correctement et on le ferme une fois qu'on a fini.
- BYTE = unsigned char
et à ce sujet, mon VS2005 me bassine a propos de fscanf (entre autre) qui est deprecated (autrement dit plus d'actualité) et à remplacer par
fscanf_s...cest une lubie M$ ou cest "universellement" acquis?
@pluche...moi vais o dodo
Marsh Posté le 01-06-2006 à 23:28:20
pfuitt a écrit : pkoi la condition de ta boucle porte sur octe et non sur count? |
en fait la boucle porte sur octet car c'est ma condition d'arret!
en fait dans un fichier j'ai une suite de 0 et 1 se terminant par un 9 ( exemple 001011011011001011019)
Code :
|
ok je pense que modifier comme ca pour mon cas ca devrai allé!
hum j'ai une boucle infini...
merci pour l'aide
Marsh Posté le 02-06-2006 à 00:58:47
ok ok !
bon maintenant je tente de faire l'inverse mais ca plante! je vous met la fonction complète et commentée
Code :
|
voici le contenu du fichier "nom":
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 2 0 1 0 0 1 0 0 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 puis ici des "petit carrés" pour les octets ajouté moi meme puis "x" pour marquer la fin du fichier
donc le programme arrive bien au premier petit carré et là ca plante je ne sais pas quoi faire!
merci!
Marsh Posté le 02-06-2006 à 03:27:16
Je pense qu'il faut regarder le fait que dans un octet tu travailles avec des puissances de 2 successives.
l'algorithme est pas très compliqué pour 1 octet mais un peu plus pour une quantité infinie de bits.
Le plus simple :
int buffer = 0; // Buffer qui contient le bit final
int[] tabEntier; // Données que tu dois convertir (à initialiser)
// Pour les 8 premiers tableaux
for (int i=0; i<8; i++) {
if (tabEntier[i] == 1) {
// On ajoute le bit en puissance de 2
buffer = buffer + pow2(i); // Ajoute d'une puissance de 2 (voir Math.h)
}
}
Marsh Posté le 02-06-2006 à 03:32:18
Pour le fscanf, je me demande si ce n'est pas un &octet qu'il faut mettre...
Marsh Posté le 02-06-2006 à 16:12:53
pfuitt a écrit : ... |
A ca sujet voir http://msdn2.microsoft.com/en-us/l [...] S.80).aspx pour plus de details.
A mon, avis ca doit etre "universellement" acquis ( http://std.dkuug.dk/jtc1/sc22/wg14/www/docs/n1031.pdf )
(mention de ISO/IEC inside)
Marsh Posté le 02-06-2006 à 18:45:40
pfuitt a écrit : et à ce sujet, mon VS2005 me bassine a propos de fscanf (entre autre) qui est deprecated (autrement dit plus d'actualité) et à remplacer par |
Oui. Mais à ma connaissance, tu peux désactiver ce warning. Ceci dit, je déconseille l'usage de fscanf()...
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers
Marsh Posté le 02-06-2006 à 18:47:32
aellihn a écrit : Je pense qu'il faut regarder le fait que dans un octet tu travailles avec des puissances de 2 successives. |
Au secours ! Apprendre à se servir des opérateurs bits avant de sortir l'artillerie !
>> << & | ~ ^ |
Marsh Posté le 02-06-2006 à 22:49:50
Emmanuel Delahaye a écrit : Oui. Mais à ma connaissance, tu peux désactiver ce warning. Ceci dit, je déconseille l'usage de fscanf()... |
donc en fait ce n'est pas une lubie M$... fscanf, sprintf et autre sont desormais deprecated et a bannir...à remplacer par leur equivalent "securisé"...
mici breizhbugs pour ton lien...rien ne vaut une bonne norme pou rmettre tout le monde d'accord.
@pluche
Marsh Posté le 02-06-2006 à 23:22:09
pfuitt a écrit : donc en fait ce n'est pas une lubie M$... fscanf, sprintf et autre sont desormais deprecated et a bannir...à remplacer par leur equivalent "securisé"... |
Attention, ce n'est pas la norme. C'est un TR, c'est à dire un Technical Report qui est une sorte de proposition d'évolution (AMA sous l'influence de Microsoft). Ne pas confondre avec les TC (Technical Corrigendum) comme n1124 qui est une correction et une reprise complète de la norme C99.
Je rappelle que le WG sont des Working Groups.
Marsh Posté le 03-06-2006 à 09:42:43
Emmanuel Delahaye a écrit : Attention, ce n'est pas la norme. C'est un TR, c'est à dire un Technical Report qui est une sorte de proposition d'évolution (AMA sous l'influence de Microsoft). Ne pas confondre avec les TC (Technical Corrigendum) comme n1124 qui est une correction et une reprise complète de la norme C99. |
j'avais bien compris que ce n'etait pas un TC et je n'evoquais que cette possibilité...
en tout cas, pour ma part même si MS influence ce genre de travaux je suis plutot pour... surtout dans le cas des focntion de formatage (genre sprintf) où il pouvait paraitre franchement aberrant que la taille max du tab. ne soit pas précisé...
enfin bref
@pluch
Marsh Posté le 03-06-2006 à 10:17:34
Je viens de jetter un oeil à ces références de Microsoft, et bah ils ne remontent pas dans mon estime.
Dans le genre cryptique, on ne fait pas mieux.
En plus, j'ai jeté un rapide coup d'oeil, et leur strcpy_s semble être un équivalent de strncpy. Enfin il vaut mieux utiliser strlcpy/strlcat, développées par Theo de Raadt.
Marsh Posté le 01-06-2006 à 22:28:57
Bonsoir,
voilà j'ai un petit souci, j'aimerais passer de huits entier (1 ou 0); donc codés chacun sur 8bits; a un seul entier sur 8 bits!
par exemple j'ai une suite : 001000010011101010100 j'aimerais les regroupé comme ceci: 00100001 00111010 10100 (par paquet de 8 bits)
j'ai trouvé comment faire l'inverse ( partit d'un octet et lire bit par bit) mais je ne vois pas comment faire pour dans mon cas
voici ce que j'ai réussi a faire:
//fonction lecture de bit
int lecturebit(FILE*f)
{
int bit;
static unsigned char octet;
static int count=0;
if(count == 0)
{
fscanf(f,"%c",&octet);
count=8;
}
else{count=count-1;}
bit=octet&1;
octet=octet>>1;
return bit;
}
et voici ce que je pensais faire (mais ca ne marche pas):
// ici c'est un bout de fonction
// en gros je dois lire dans un fichier des char (variable: octet)
// si ce char est 1 on met comme bit 1 et si c'est 0 on met le bit 0 dans la variable donnee
// le but est d'avoir comme train binaire pour ma variable donnee, la suite des 8 0 ou 1 lu
fscanf(g,"%c",&octet);
while( octet != 9);
{if(count > 0)
{
if(octet == 1)
{donnee&1=1;
donnee=donnee>>1;
}
if(octet == 0)
{donnee&1=0;
donnee=donnee>>1;
}
count=count-1;
}
else{fprintf(g,"%d",donnee);
count=8;
}
fscanf(g,"%c",&octet);
}
merci d'avance!!