Bonjour,
J'aimerais convertir un entier en char : de 132, j'aimerais obtenir #132 et non #$84 comme le fait le transtypage char(mon_entier)
Merci de votre aide !
Bonjour,
J'aimerais convertir un entier en char : de 132, j'aimerais obtenir #132 et non #$84 comme le fait le transtypage char(mon_entier)
Merci de votre aide !
Salut,
Peut-être qu'en amont de cette réflexion existe la réponse.J'aimerais convertir un entier en char : de 132 [...]
Suffit simplement d'ajouter un "signe" (#) en début de cet entier, non ?
Enfin, si j'ai bien tout saisi.
C'est la que je demande comment ajouter le # devant ...
euh, chr (132) ne ferait il pas l'affaire ?
Chr(132) me renvoie #$84 ... OK
Le problème est que j'envoie ca dans une trame via TComPort.
J'utilise un analyseur de trame pour contrôler mon envoi :
CAS 1 :
envoi := #1 + #3 + #0 + '0' + #0 + #1 + #$84 + #5
fPortSerie.WriteStr(envoi);
J'observe ceci sur l'analyseur : 01 03 00 30 00 01 3F 05
alors que si je fais :
CAS 2 :
envoi := #1 + #3 + #0 + '0' + #0 + #1 + #132 + #5
fPortSerie.WriteStr(envoi);
J'observe ceci sur l'analyseur : 01 03 00 30 00 01 84 05
Bien sûr, la chaine "envoi" est obtenue dans une fonction de traitement.
Bref, je suis dans le cas 1 et j'aimerais être dans le cas 2
Il te suffit de convertir ton 132 en hexadécimal : IntToHex(132,2) -> 84
On dirait plutôt que ta gestion de chaîne s'enmêle les pinceaux et te renvoi un point d'interrogation ($3F) en remplacement d'un caractère inconnu .
132 en octal -> Z decimal -> 90 hexa -> 0x5A
132 en decimal -> ä hexa -> 0x84
reste à savoir si ta trame doit être :
SOH ETX NULL 0 NULL SOH Z ENQ
ou
SOH ETX NULL 0 NULL SOH ä ENQ
Pour simplifier la tache il peut utiliser le fonction BinToHex
lol c'est pire ... 0x132 n'est même plus dans la table ascii ni même dans l'intervalle char ou byte.
0x132 = 306.
bon je pense qu'il ne faut pas faire un cours la dessus, mais juste rappeler vite fait que :
byte = char
donc
132 = #132!
paf.
déjà il faudrait que notre ami nous si effectivement sa communication etait en 7 bits au lieu de 8!
deuxio, savoir si il veut communiquer un "Z" ou un "ä" ... l'un comme l'autre ne sachant pas sur quoi il travail. on ne peut deviner.
troisio, pour convertir un seul et unique byte ou char ... il n'est pas nécessaire d'utiliser BinToHex.
surtout qu'ici, il n'est pas question de convertir quoique ce soit en hexa, mais d'arriver de 132 à #132 ... hum ... un vrai dilemme en somme ...
un byte vers char (ansi) et inversement, une petite chaine vers bytes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
43
44 type TSingleBC = packed record case integer of 0 : (C : AnsiChar); 1 : (B : byte); end; TMultiBC = packed record case integer of 0 : (Cs : array[byte] of AnsiChar); 1 : (Bs : array[byte] of byte); 2 : (Ws : array[0..$FF shr 1] of word); 3 : (Ls : array[0..$FF shr 2] of LongWord); end; procedure TForm26.Button1Click(Sender: TObject); var SBC : TSingleBC; MBC : TMultiBC; N,M : byte; begin SBC.C := #132; ShowMessage(format('#132 = 0x%.2x = %d',[SBC.B, SBC.B])); SBC.B := 132; ShowMessage(SBC.C); FillChar(MBC.Cs, $FF, #0); for N := 32 to 126 do MBC.Bs[N-32] := N; ShowMessage(MBC.Cs); FillChar(MBC.Cs, $FF, #0); N := $30; M := 0; repeat MBC.Ls[M] := N or ((N+1) shl 8) or ((N+2) shl 16) or ((N+3) shl 24); inc(N, $04); inc(M); until N >= $80; ShowMessage(MBC.Cs); MBC.Cs := 'YOP!'; ShowMessage(format('YOP! = %.2x %.2x %.2x %.2x',[MBC.Bs[0],MBC.Bs[1],MBC.Bs[2],MBC.Bs[3]])); end;
Laisse tomber tu es trop dans ton truc technique. Le mec il a une string qui représente DEJA son char ( ou son byte...char étant un connerie de C, byte étant le terme réellement utilisé par les informaticiens ).
Si tu relis bien le post, '132' ne peut pas être un entier c'est une string qui représente un entier. Donc si cet entier est déjà en Héxa, il faut rajouter '$' avant cette représentation afin de la convertir.
oui déjà la question n'etait pas claire en soit...
puisque la valeur etant entre 0 et 255 on peut croire à avoir l'ordre d'un caractere dans la table ascii via la valeur entière.
donc encore une fois, soit de savoir si on veux "Z", "ä" ou "132" (soit $31 $33 $32).
et seul notre ami peut nous répondre ... quand il daignera se montrer.
"Laisse tomber tu es trop dans ton truc technique"
bah la programmation c'est forcement technique... si on veux un truc simple ... faut retourner aux légos... ou aux duplos si les légos c'est trop complexe
de plus la méthode que je montre est beaucoup plus simple que n'importe quel autre méthode de conversion basé sur je ne sais quel truc mathématique.
c'est juste la syntaxe qui parait complexe ...
C'est vrai, mon hypothèse c'était que la personne par exemple, essaye de passer d'un TEdit ayant pour Text '132' ( string ) vers le char 132.
Dans ce cas Il aurait simplement à faire MyCharValue := Byte( StrToInt( '$'+MyTedit.Text )) pour obtenir son char.
Bon ensuite n'ayant pas de nouvelles... ca me parait logique que c'est une string au départ, sinon la résolution du problème avait été donné quasiment dès le départ.
Non, justement, il ne fallait pas le $ dans ce cas, car 132 suppose une base 10 et non une base 16.
Code : Sélectionner tout - Visualiser dans une fenêtre à part MyCharValue := Char( StrToInt( MyTedit.Text ))
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager