Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2607 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  conversion de array of byte en String

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

conversion de array of byte en String

n°833080
jaimetonso​urire
Posté le 26-08-2004 à 17:19:12  profilanswer
 

Salut,
Je cherche depuis deux jour à convertir un tableau array of byte en String :bounce: , mais aucune des fonctions de transtypage que j'utilise ne marche :non: . Quelqu'un aurait il une idée de procéder?

mood
Publicité
Posté le 26-08-2004 à 17:19:12  profilanswer
 

n°833114
antp
Super Administrateur
Champion des excuses bidons
Posté le 26-08-2004 à 18:08:32  profilanswer
 

en général une bête assignation ça marche
 
s := a;
 
où "a" est l'array et "s" la chaîne
 
à condition que ton array se finisse par un #0
 
sinon avec un StrLCopy, en faisant d'abord un SetLength sur ta variable de type string :
SetLength(s, longueur+1)
le +1 vu qu'il faut le zéro final, et tu donnes "longueur" à StrLCopy comme longueur max.

n°833697
martin95
Posté le 27-08-2004 à 08:57:37  profilanswer
 


function ByteToStr(T: array of byte): string;
const
  Digits: array[0..15] of char =
          ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
 
var
  I: integer;
begin
  Result := '';
  for I := Low(T) to High(T) do  
    Result := Result + Digits[(T[I] shr 4) and $0f] + Digits[T[I] and $0f];
end;

n°833778
jaimetonso​urire
Posté le 27-08-2004 à 10:15:05  profilanswer
 

salut, et merci de votre aide
martin95 est je ne comprend pas trop la ligne  
Result := Result + Digits[(T[I] shr 4) and $0f] + Digits[T[I] and $0f];  
peux stp m'y apporter des éclaircissement car je dois l'adapter à mon code!
en fait l'esprit de mon code est que je veux convertir une longitude donnée sous la forme O112445... est degrés minutes secondes.
 

n°833868
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-08-2004 à 11:27:28  profilanswer
 

Le code qu'il t'a donné c'est pour générer une chaîne affichant la valeur hexa de l'array of byte fourni. Je doute que ce soit de ça que tu aies besoin...

n°833899
jaimetonso​urire
Posté le 27-08-2004 à 12:03:41  profilanswer
 

Ah ok! non c'est pas de ca dont j'ai exactement besoin!
Mais kan je fais une affectation simple comme tu me l'as suggéré ca me met un msg d'erreur type incompatible et dans mon code g déja un SetLength(Mon_table_array_of_byte, longueur+1) mais je ne vois pas ou placer le StrLcopy? et le rapprochement avec la conversion!

n°834024
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-08-2004 à 13:42:29  profilanswer
 

Ton tableau de byte, il vient d'où ? Tu le remplis comment ? Donne un peu de code...


Message édité par antp le 27-08-2004 à 13:42:36
n°834059
jaimetonso​urire
Posté le 27-08-2004 à 13:54:06  profilanswer
 

function chaine_longitude(longitude: integer):ShortString;
// fonction renvoyant une chaîne de caractères degrés° minutes' secondes"
// et millisecondes à partir de la longitude en millisecondes
// à titre indicatif, car n'est plus utilisée par le logiciel
var  tableau_longitude: array of byte;
     temporaire: integer;
     degres: integer;
     centdegres: integer;
     minutes: integer;
     secondes: integer;
     ds:integer;
begin
    setlength(tableau_longitude,16);
    tableau_longitude[1]:=ord(' ');
    if longitude>=0
       then tableau_longitude[0]:=ord('E')
       else tableau_longitude[0]:=ord('O');
    temporaire:=Abs(longitude);
    degres:=(temporaire div 3600000);
    centdegres:=(degres div 100);
    tableau_longitude[2]:=48+centdegres;
    degres:=degres-centdegres*100;
    tableau_longitude[3]:=48+(degres div 10);
    tableau_longitude[4]:=48+(degres mod 10);
    tableau_longitude[5]:=ord('°');
    temporaire:=temporaire-degres*3600000;
    minutes:=(temporaire div 60000);
    tableau_longitude[6]:=48+(minutes div 10);
    tableau_longitude[7]:=48+(minutes mod 10);
    tableau_longitude[8]:=ord('''');
    temporaire:=temporaire-minutes*60000;
    secondes:=(temporaire div 1000);
    tableau_longitude[9]:=48+(secondes div 10);
    tableau_longitude[10]:=48+(secondes mod 10);
    tableau_longitude[11]:=ord('.');
    temporaire:=temporaire-secondes*1000;
    ds:=(temporaire div 100);
    tableau_longitude[12]:=48+ds;
    temporaire:=temporaire-ds*100;
    tableau_longitude[13]:=48+(temporaire div 10);
    tableau_longitude[14]:=48+(temporaire mod 10);
    tableau_longitude[15]:=ord('"');
    chaine_longitude:=string(tableau_longitude);
end;
 
C'est dans la dernière ligne que je veux récupérer dans chaine_longitude les valeurs de tableau_longitude.
 

n°834076
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-08-2004 à 14:02:19  profilanswer
 

tu remplaces "tableau_longitude: array of byte" par "tableau_longitude: string" et ça marchera tout seul :D
À la limite tu déclares même rien du tout et tu utilises Result (c'est plus pratique que de taper le nom de la fonction ; toute fonction a une variable "Result" cachée).
 
Ça te permettra aussi de virer tous les ord(...) et à la place de 48+(...) tu mets '0'+(...), par exemple :
 
tableau_longitude[7]:='0'+(minutes mod 10);  
(si ça marche)
 
et fais gaffe : les chaînes commencent à 1, donc tu devras décaler de 1 tous tes chiffres entre [...]


Message édité par antp le 27-08-2004 à 14:02:58
n°834160
jaimetonso​urire
Posté le 27-08-2004 à 14:29:32  profilanswer
 

En fait ca ne peux pas marcher, je dois forcément le laisser en array of byte sinon ca flingue tt mon code, cette fonction est liée à plusieurs autres!
Ce ki m'arrangerait le plus c'est de convertir un array of byte en string, c'est kan meme dommage k'il n'y ai pas de fct ByteToStr :non: lol!

mood
Publicité
Posté le 27-08-2004 à 14:29:32  profilanswer
 

n°834173
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-08-2004 à 14:33:22  profilanswer
 

Tu mets un #0 dans la dernière case de ton tableau et tu fais un chaine := PChar(Tab); ça devrait marcher. Sinon il faut utiliser StrLCopy comme je l'ai dit pour copier le contenu de ton tableau dans une chaîne, en ayant d'abord fait un SetLength de ladite chaîne.

n°834268
jaimetonso​urire
Posté le 27-08-2004 à 15:38:09  profilanswer
 

Ca n'a pas marché, mais j'ai fis un truc tout con auquel je n'avais pas pensé, et ca marche nicquel!
En fait il faut faire un concat(chr(tableau_longitude[0]), chr(tableau_longitude, ...) et l'affecter au result de la fonction!
Le seul problème c'est qu'en mode debbug tu n'as pas accès au result pour des raison d'optimisation!
Aurait tu une idée, car ma fonction n'est pas affectable!

n°834271
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-08-2004 à 15:41:16  profilanswer
 

C'est très crado ça :D
Tu fais Result := Result + Char(tableau_longitude[i]) dans une boucle où i va de 0 à longueur-1, et ça devrait aller aussi.
 
Pour éviter qu'il dise qu'on n'a pas accès à cause de l'optimisation, il suffit de la désactiver : Project -> Options -> Compiler -> tu décoches "optimisation". Puis tu vas dans Projet -> Build all pour tout reconstruire sans l'optimisation.
Il ne faudra pas oublier de la réactiver quand t'as fini.

n°834349
jaimetonso​urire
Posté le 27-08-2004 à 16:50:50  profilanswer
 

Nickel merci!
Au fait tu sais pas ou est ce ke je peux trouver sur le web, un code de conversion de cordonnées géographiques décimales (longitude, latitude, altitude) en degrés, minutes secondes?
J'aimerai vérifier mes résultats!
Bon we et merci :-P

n°834358
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-08-2004 à 16:56:53  profilanswer
 

ce que j'avais fait pour décomposer des valeurs de longitude/latitude (où les degrés sont les nombes entiers) :
 
  Degres := Trunc(Value);
  Minutes := Trunc(Frac(Value) * 60);
  Secondes := Frac(Frac(Value) * 60) * 60;
 
Mais je suis pas sûr d'avoir pigé la question :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  conversion de array of byte en String

 

Sujets relatifs
Tableau Array [JS]conversion d'object de tableaux en int
[VBA-VB]Conversion VBA -> VBSQL fonction conversion vers date
Comment récupere la valeur d'un array avec les globales ?Comment stocker une query string de longueur variable
[BCB6] problème de conversion de couleur hexaConversion mysql vers oracle
convertir une std::string en type de base (int, float, etc)accès par caractère d'une string
Plus de sujets relatifs à : conversion de array of byte en String


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)