2016-03-16 6 views
-3

Je cherche un moyen de convertir une chaîne de caractères en une chaîne de leurs représentations hexadécimales. Ainsi, la lettre A sera représentée par 0x41. Ce que j'essaie de faire est de crypter un fichier texte en utilisant un algorithme qui crypte les caractères hexadécimaux de la notation 0x ** où ** ressemble à la notation hexadécimale du caractère. Je lis un tableau de 16 caractères du fichier à un tableau de caractères, puis je devrais les convertir en notation hexadécimale afin que je puisse les passer à la fonction de cryptage. J'utilise l'extrait de code suivant pour convertir le tableau de caractères en hexadécimal. J'ai créé un TempBuffer pour contenir la valeur hexadécimale pour chaque caractère de sorte qu'il sera dans la notation 0x **. Mon problème est comment stocker la valeur dans TempBuffer à un élément du tableau de caractères Unsigned. Regardez le code ci-dessous:Convertir une chaîne de caractères en un caractère non signé en C

static uint8_t TextToEncrypt[16]; // Declaring the array to store the hexadecimal notation 

void ToHex(char InText[]) // The Function to Convert an array of characters to hexadecimal array 
{ 
    int i=0; 
    for(i=0; i<16; i++) 
    { 
     char TempBuffer[4]; // Tempbuffer to hold the converted value 
     sprintf(TempBuffer,"0x%x",InText[i]); // converting to hexadecimal 
     // Here i need to store the value in TempBuffer which will be something like 0x41 in TextToEncrypt[i] so I can pass it to encryption 
    } 
} 
+0

J'ai beaucoup essayé, mais sans aucun résultat, je préfère avoir quelque chose de garanti pour le tester. Je ne peux pas poster tout ce que j'ai essayé –

+0

Je pense qu'il y a une certaine confusion sur ce qu'est un "tableau hexadécimal". Peut-être que vous avez besoin de revenir au vrai problème, votre code de cryptage. – zaph

+0

Votre question a été posée et aswered des centaines de fois.Vous devriez faire quelques recherches, juste vider votre titre dans un websearch et lire les premiers résultats. –

Répondre

0

peut-être ce dont vous avez besoin est atoi pour convertir votre chaîne en entier, puis un moyen de convertir cet entier en décimal en hexadécimal. Jetez un oeil this SO post. Pour convertir en hexadécimal, je préfère utiliser sprintf.

Conversion chaîne en décimal:
char decstr[] = "1202"; 
int decimal = atoi(decstr); 
printf("%d\n", decimal); 

// prints 1202 
Conversion décimal en hexadécimal:
char hex[5]; 
sprintf(hex, "%x", decimal); 
printf("%s\n", hex); 

// prints 4b2 

Edité après OP a ajouté un exemple

Comme chaque représentation hexadécimale dans votre cas aura une longueur de quatre ans, yo Vous devez définir un tableau 2d uint8_t. Jetez un oeil ci-dessous:

uint8_t TextToEncrypt[16][4]; 

void ToHex(char InText[]) 
{ 
    int i, j; 
    char TempBuffer[4]; 

    for(i=0; i<16; i++) 
    { 
     sprintf(TempBuffer,"0x%x", InText[i]); 
     for (j = 0; j < 4; ++j) 
      TextToEncrypt[i][j] = TempBuffer[j]; 
    } 

    for (i = 0; i < 16; ++i) 
    { 
     for(j=0; j<4; ++j) 
      printf("%c", TextToEncrypt[i][j]); 
     printf("\n"); 
    } 
} 

Rappelez-vous d'inclure l'en-tête stdint.h, si vous utilisez MinGW compiler

+0

cela peut sembler bizarre. mais j'essaye d'abord de convertir chaque caractère en représentation hexadécimale par ceci: sprintf (TempBuffer, "0x% x", InText [i]); alors je veux stocker les données de tampon de temp qui seront comme 0x54 ou 0x78 ou quelque chose comme ceci je veux le stocker dans un caractère non signé de type uint8_t qui a défini pour être de ce format. excusez mes questions. –

+0

Merci pour vos conseils. J'ai reformulé la question à nouveau. et j'ai supprimé la réponse que j'avais posté précédemment. J'espère que je peux trouver une solution pour le point que j'ai indiqué ci-dessus –

+0

@MohammadMMoshawrab Regardez la réponse éditée. J'espère que ça aide, enfin! –

0

Je ne sais toujours pas exactement ce que vous voulez, voici un autre essai.

Ceci est juste pour vous donner une idée, il y a encore beaucoup de problèmes tels que la gestion de l'entrée mal et faire quelque chose avec outText:

void toHex(char InText[]) 
{ 
    static int outInts[17]; 

    for(int i=0; i<16; i++) 
    { 
     outInts[i] = InText[i]; 
    } 
    for (int i=0; i<16; i++) { 
     printf("%i, ", outInts[i]); 
    } 
    printf("\n"); 
} 
    toHex("abcdefghijklmnopq"); 

Sortie:

97, 98, 99 , 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112

Si ce n'est pas ce que vous voulez, vous devez fournir un exemple.

+0

merci beaucoup, mais mon problème est de stocker le texte converti dans un tableau de nombre entier non signé et non dans un tableau de caractères. Je ne peux pas crypter un tableau de caractères basé sur l'algorithme que j'utilise ... des idées –