Bonjour,
je cherche à connaitre la fonction qui me permet de faire conversion d'une chaine en tableau d'octet.
Par avance merci.
Bonjour,
je cherche à connaitre la fonction qui me permet de faire conversion d'une chaine en tableau d'octet.
Par avance merci.
Comme ca peut être ?
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 type TStringBytes = array of Byte; var Form1: TForm1; implementation {$R *.dfm} function ConvertStringToBytes(Text: String): TStringBytes; var i: Integer; begin SetLength(Result, Length(Text)); for i := 1 to Length(Text) do begin Result[i-1] := Ord(Text[i]); end; end; procedure TForm1.Button1Click(Sender: TObject); var Tab: TStringBytes; S: String; I: Integer; begin S := ''; Tab := ConvertStringToBytes(Edit1.Text); for i := low(Tab) to High(Tab) do S := S+IntToStr(Tab[i])+#13+#10; ShowMessage(S); end;
Que je ne m'abuse : une string c'est déjà un tableau d'octets !
s[0] contient le nombre de caractères (d'octets) de la chaîne, donc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 var s:string; ... s:='Bonjour';
s[0]=7 !, c'est l'équivalent de length(s);
s[1] contient le code ascii de 'B' donc
ou bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part s[1]:='A';
donnent S='Aonjour';
Code : Sélectionner tout - Visualiser dans une fenêtre à part s[1]:=65;
Je ne vois pas où est le problême...
waskol est vrait
+
celon les obtion de votre compilo , string veu dire une short ou long string
si long string je sais pas si s[0]=longth(s) a vérifier,, car long sting c'est 4 gk , et s[0] ne peut contenir que 255 ok
On fume la moquetteEnvoyé par waskol
![]()
Franchement, le type String se gère comme cela .
Si tu appelles un S[0] , une belle exception est générée.
Maintenant, mais cela m'étonnerait, c'est peut être valable pour d'autre Type chaine. (Ou alors en C, C++,etc...)
Envoyé par edam
Hé bien non si tu appelles s[0] pour lire ce qu'il y a dedans, no problemo !!!
Si c'est pour écrire dedans, non plus !!!
exemples :
--> Aucun problême mon garçon !
Code : Sélectionner tout - Visualiser dans une fenêtre à part i:=s[0];
-->là non plus !
Code : Sélectionner tout - Visualiser dans une fenêtre à part if s[0]=7 then...
-->là non plus ! mais attention : l'emplacement mémoire du feu s[7] (autrement dit ce qui contenait 'r') n'est pas libéré ! (fuite mémoire ?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part s[0]:=6
-->pour les premières et 2eme ligne, ça marche, sauf quand la chaîne sera libéré par l'application ! Et attention donc : ça empiete surement sur un emplacement mémoire déjà utilisé par autre chose...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 s[0]:=8 Affiche(s[8]) s[8]:=22
pour pouvoir changer la taille de ta chaîne il faut en fait utiliser :
Conclusion :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Setlength(s,8)
S est un tableau indicé de 0 à s[0], je ne vois pas où est le problème pour lire et ecrire les valeurs directements aux indices qui vont de 1 à s[0]...
Tu fait bien pareil avec un tableau normal non ?
Va réviser l'aide delphi ! Moi je n'ai pas fumé !![]()
naaaaaaaaan
change tes option de string en longstring et voir
tu peut modifer s[0] seulement si s est une shortstring car avec tu as déjà loué une zone memoir de 255 ok par contre avec une longstring c'est un pointeur de char présque comme un pchar a différence de 8 ok négatife (avant s[0], 4 ok de tailmax et 4 ok de je sais pas koi) et pchar avec un chr(0) a la fin. voir laide en ligne
autre idée si tu veux utlisé les code ascci des caratére sans passé par ord
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 s:string[255]; t:array[0..255] of byte absolute s; la t[0]= length(s)
Exact, le code suivant ne marche pas si l'option 'Chaînes vastes' est activée, sinon si :
par contre, ça, ça marche toujours
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TForm1.Button1Click(Sender: TObject); var s:string; begin s:='Bonjour'; memo1.Lines.Add(IntToStr(ord(s[0]))); s[0]:=chr(6); memo1.Lines.Add(s); end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 procedure TForm1.Button1Click(Sender: TObject); var s:string; begin s:='Bonjour'; memo1.Lines.Add(IntToStr(ord(s[1]))); memo1.Lines.Add(s); s[3]:='V'; s[4]:=chr(90); memo1.Lines.Add(s); end;![]()
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