Considérer une chaine de BYTE comme une chaine de char en c

Fermé
soum - 31 mars 2015 à 23:52
 sou - 6 avril 2015 à 21:23
Bonjour,
Dans mon programme je doit tester l'existence d'une série de BYTE dans une autre plus grande , je sais qu'en C les BYTE sont considéré char mais mois je doit comparer les BYTE pas leurs équivalent en char et je sais que strstr est la solution la plus souple pour trouver une chaine de char dans une autre mais son application ne marche pas sur la chaine de BYTE que j ai meme si dans mon code j ai tout déclarer comme char :) merci pour votre réponse.
voila mon code ( le but c'est de lire d un secteur disk et de chercher une chaine dans un ensemble de secteur )

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
# define FALSE 0
# define TRUE !FALSE

char *Lire_secteur(int numSector){


int compteur_ligne,compteur_octet;
int retCode = 0;
char sector[512] ;
DWORD bytesRead;
HANDLE device = NULL;

device = CreateFile("\\\\.\\C:", // Drive to open
GENERIC_READ, // Access mode
FILE_SHARE_READ|FILE_SHARE_WRITE, // Share Mode
NULL, // Security Descriptor
OPEN_EXISTING, // How to create
0, // File attributes
NULL); // Handle to template

if(device == INVALID_HANDLE_VALUE)
{
printf("CreateFile: %u\n", GetLastError());
}

SetFilePointer (device, numSector*512, NULL, FILE_BEGIN) ;

if (!ReadFile(device, sector, 512, &bytesRead, NULL))
{
printf("ReadFile: %u\n", GetLastError());
}
else
{
printf("Success!\n");
for(compteur_octet=0;compteur_octet<512;compteur_octet++)
{

}
}
CloseHandle(device);

return sector;}


void Afficher_secteur(int Num_Sect)
{
printf("\n LE CONTENUE DU SECTEUR NUMERO %d EST : \n\n",Num_Sect) ;
int compteur_ligne, compteur_octet, octet=0;
char *secteur = Lire_secteur(Num_Sect) ;

//textcolor(14);
printf("\n LE CONTENUE DU SECTEUR NUMERO %d EST : \n\n",Num_Sect) ;
for(compteur_ligne=0;compteur_ligne<32;compteur_ligne++){ //affichage de 32 ligne
// textcolor(14);
if(16*compteur_ligne==0) printf("000%d ",16*compteur_ligne); //utile pour l'affichage
else{if(16*compteur_ligne<100){printf("00%d ",16*compteur_ligne);} //utile pour l'affichage
else{printf("0%d ",16*compteur_ligne);}} //utile pour l'affichage
for(compteur_octet=0;compteur_octet<16;compteur_octet++){ //affichage de chaque ligne
// textcolor(WHITE);
printf("%x ",secteur[octet]);
octet++ ;
}
printf("\n\n");
}
}

int Recherche_chaine(char *secteur , char *chaine_info){
int trouvee ;
if(strstr(secteur, chaine_info) != NULL)
trouvee = TRUE;

else
trouvee = FALSE;

return trouvee;
}

int main(int argc, char ** argv)
{
Afficher_secteur(5);

printf("%d",Recherche_chaine(Lire_secteur(5),"f"));

return 0;

}
A voir également:

1 réponse

salut, les c-string sont des null-terminated string, si tu ne veux pas de null-terminated string il faudra recréer des fonctions qui prennent la longueur en argument que tu dois connaitre a l'avance.
0
Salut merci d avoir répondu a ma question malheureusement c'été mal posé j ai trouvé la solution fallait juste faire un sprintf avec %x pour afficher la valeur en exa dans une autre chaine ce qui veut dire convertir thanks
0