salut a tous je doit effectuer une convertion binaire je dispose d'un tableau unsigned char et je pense que sa serai plus facile de le convertir ce tableau en AnsiString pour effectuer cette convertion. Si quelqu'un aurai une idée merci
Version imprimable
salut a tous je doit effectuer une convertion binaire je dispose d'un tableau unsigned char et je pense que sa serai plus facile de le convertir ce tableau en AnsiString pour effectuer cette convertion. Si quelqu'un aurai une idée merci
Salut !
En procédant ainsi :
Code:
1
2
3 //Déclaration en global char Tab[]="1234";
On peut faire aussi (ce qui revient à faire la même chose):Code:
1
2
3 AnsiString N = Tab; int n = N.ToInt();
REM : il ne faudra jamais altérer le dernier caractère Nul car il fixe la longueur de la chaîne dans ce tableau !Code:
1
2
3
4 #define Nul 0 char Tab[5] = {'1','2','3','4', Nul};
On a bien sûr la possibilité de placer ce caractère Nul n'importe où dans ce tableau.
A plus !
Est ce que ton tableau ne contient que des caractères imprimables? Ou alors il peut y avoir n'importe quelles valeur entre 0 et 255?Citation:
je dispose d'un tableau unsigned char
mon tableau contient des valeurs binaires ou decimales ou hexadicimales
Donc il n'y a pas d'intérêt à le convertir en AnsiString, tu aura des problèmes avec les caractères spéciaux qui pourront être mal interprétés.
Poste un bout de code pour voir se que peut contenir ton tableau.
Salut !
Ce serait bien d'en préciser le contenu !
Partant de là on saurait quelle solution proposer (hexadécimal, ascii, octal, digit, binaire, ternaire, dromadaire, petit pois, lapin blanc ...) !
On a également ceci en magasin :
Donc à l'usage :Code:
1
2
3
4
5
6
7 union U { int I; Byte T[4]; }; U u;
A plus !Code:
1
2
3
4
5
6 u.T[0] = 0x10; u.T[2] = 0x20; u.T[3] = 0x30; u.T[4] = 0x40; Label1->Caption = u.I;
Dans mon tableau si c'est du:
- binaire 110001..
- decimal 1234567890
- hexa 0123456789ABCDEF
voila ce que j'ai dans mon tableau unsigned char
Dans un programme que j'ai deja fait je m'etait mi deux fonctions qui lise dans un Edit sauf que le souci maintenant mais valeur sont dans un tableau unsigned char et c'est valeur son mise dans une StringGrid
voici le code des deux foncions d'un programme qui me permeter de passe de hexa en binaire
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 AnsiString Conv_hexa_bin( char val_hexa ) { //Declaration de variable AnsiString val_binaire; if(val_hexa=='0') val_binaire="0000"; if(val_hexa=='1') val_binaire="0001"; if(val_hexa=='2') val_binaire="0010"; if(val_hexa=='3') val_binaire="0011"; if(val_hexa=='4') val_binaire="0100"; if(val_hexa=='5') val_binaire="0101"; if(val_hexa=='6') val_binaire="0110"; if(val_hexa=='7') val_binaire="0111"; if(val_hexa=='8') val_binaire="1000"; if(val_hexa=='9') val_binaire="1001"; if(val_hexa=='A') val_binaire="1010"; if(val_hexa=='B') val_binaire="1011"; if(val_hexa=='C') val_binaire="1100"; if(val_hexa=='D') val_binaire="1101"; if(val_hexa=='E') val_binaire="1110"; if(val_hexa=='F') val_binaire="1111"; //Declaration de variable return (val_binaire); } AnsiString Conversion( AnsiString val_hexa ) { //On met ton en majuscule val_hexa = UpperCase( val_hexa ) ; //Declaration de variable AnsiString result = "" ; for( int i=1; i<= val_hexa.Length(); i++ ) result = result + Conv_hexa_bin(val_hexa[i]); //Retourne la result return( result ) ; }
Salut !
Bien que l'on puisse également faire cet type de conversion avec un algorithme, si tu souhaites conserver ce même type de code, voici ce qui serait plus intéressant (au sens où chez toi chaque valeur passe en revue systématiquement l'ensemble des tests) :
Donc l'autre méthode devient :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 AnsiString Conv_hexa_bin( int val_hexa ) { // Ce Min -> Maj est suffisant et permet d'éviter UpperCase if(val_hexa >= 0x60) val_hexa = val_hexa & 0xDF; switch(val_hexa) { case '0': return "0000"; case '1': return "0001"; case '2': return "0010"; case '3': return "0011"; case '4': return "0100"; case '5': return "0101"; case '6': return "0110"; case '7': return "0111"; case '8': return "1000"; case '9': return "1001"; case 'A': return "1010"; case 'B': return "1011"; case 'C': return "1100"; case 'D': return "1101"; case 'E': return "1110"; case 'F': return "1111"; } return ""; }
Code:
1
2
3
4
5
6
7
8
9
10
11
12 AnsiString Conversion( AnsiString val_hexa ) { //Declaration de variable AnsiString result; // de facto, résult est vide for( int i=1; i<= val_hexa.Length(); i++ ) result = result + Conv_hexa_bin(val_hexa[i]); //Retourne la result return( result ); }
Pour le report dans les cellules d'un TStringGrid :
Code:
1
2 AnsiString N;
A plus !Code:
1
2 StringGrid->Cells[X][Y] = Conversion(N);
Dans solution n'est pas bonne je doit utiliser des unsigned char
J'ai fait une bout de code qui consiste a lire le tableau hexa et comparer s'il y a des FF dans chaque ligne si c'est le cas alors mais la convertion dans le tableau binaire mais le souci c'est quil me mais deux erreurCode:
1
2
3
4
5
6
7 for(int j=0;j<512;j++) { if(hexa[j]=="FF") { binaire[j]="11111111"; } }
[C++ Erreur] Unit1.cpp(235): E2034 Impossible de convertir 'char' en 'char *'
[C++ Erreur] Unit1.cpp(237): E2034 Impossible de convertir 'char *' en 'char'
voila si quelqu'un peut m'aider
les deux tableaux sont des unsigned char
Salut !
Cela n'a pas de sens au niveau d'un Byte qui peut juste contenir le caractère ASCII 'F' et non une chaîne caractères ASCII "FF" !Citation:
if(hexa[j]=="FF")
Par contre, il est certain qu'il puisse contenir (de B7 à B0 : 11111111) :
Mais je n'ai toujours pas compris ton problème !Code:
1
2 if(hexa[j] == 0xFF)
A plus !