comment copier le contenu d'un buffer dans le champ d'une structure ?
bonjour,
Je developpe en c++ sous visual.net et j'ai un probleme pour transférer le contenu d'un buffer dans le champ d'une structure de type char[8].
Please help
comment copier le contenu d'un buffer dans le champ d'une structure ?
bonjour,
Je developpe en c++ sous visual.net et j'ai un probleme pour transférer le contenu d'un buffer dans le champ d'une structure de type char[8].
Please help
montre nous le code de ta structure et ce que tu veux transferer.
Pour la copie de chaine, tu peux utiliser strcpy
struct TyDebutCnf
{
char deb_version[8];
...
...
};
//filestream
FileStream* FichierSrc = new FileStream(this->NomFichier->Text, FileMode::Open, FileAccess::Read);
//buffer
Byte Buffer __gc[] = new Byte __gc[TailleBuffer];
//binaryreader
BinaryReader* BRead = new BinaryReader(FichierSrc);
//pointeur vers la structure
struct TyDebutCnf pTyDebutCnf;
pTyDebutCnf.deb_version = ...
a la place des ... j'ai testé plusieur chose mais toujours avec une erreur C2440
Je ne sais plus quoi utiliser, j'ai pas testé avec strcpy
ca va pas etre simple là ...
Premièrement, tu n'as que 7 caractères de disponible dans ta structure, c'est bien ca que tu veux faire ? copier les septs premiers caractères de ton flux ?
Ensuite, tu as l'air d'utiliser des types managés, tu veux copier une String managée dans un char * ? Est-ce bien ca ? pourquoi ne pas utiliser une String managée en destination ?
je pensai avoir 8 caracteres disponible dans ma structure de facon a copier les 8 premier caractere de mon flux.
en fait le fichier dans lequel je lis au départ est un fichier binaire, pour l'instant je lis les 8 premier octets dans le fichier et je les place dans un buffer __gc[].
J'aimerai copier le contenu du buffer dans le champ char deb_version[8] de ma structure TyDebutCnf
comment faire ?
je suis ouvert a toutes les propositions
petite précision je vais devoir faire ca pour tout le fichier dans des champs différent.
je ne vois pas dans ton code au dessus la lecture du flux à proprement parler.
Mais en admettant que tu l'ais fait, tu le stockes dans une String managé ? Dans ce cas, il faut la convertir en char avec l'objet Marshal
NbByteLu = BRead->Read( Buffer, 0, 8);
voici pou la lecture du flux
moi, ce que je ferais, c'est soit lire directement un String, soit convertir ton Byte en String (méthode ToString), puis je convertirai en char avec l'objet de marshal, puis, je ferais un strcpy dessus
Oui ca peut etre une oidée qui vaut la peine d'etre essayé.
Peux tu me donner un exemple please ...
tu as un exemple de conversion (en c++/cli), à cette adresse http://nico-pyright.developpez.com/t...rialisationXml
J'essaye de tester ta solution mais j'ai toujours une erreur de conversion ...
peut etre que je n'utilise pas la bonne syntaxe.
Faut il activée quuelquechose dans les propriété du projet ?
effectivement, tu ne peux pas utiliser directement cette syntaxe, vu que c'est du C++/CLI (pour vs2005), et que tu utilises toi VS2003.
Il faut adapter
quels sont les différences entre le 2003 et le 2005 ?
le 2003 utilise des mots clés indigeste pour utiliser les extensions managés.
Avec VS2005 et l'apparition du C++/CLI, tout est plus standard et normé
Je n'arrive pas a assigné a pTyDebutCnf.deb_version les valeurs contenue dans le buffer.
je peux peut etre utiliser Bitconverter ou convert ??
Je t'ai déjà dit qu'il fallait utiliser l'objet marshal, comme dans l'exemple, il faut juste remplacer les gcnew par new __gc, et autres trucs comme ca
Je test deux solutions :
pTyDebutCnf.deb_version = System::Text::ASCIIEncoding::ASCII->GetChars(Buffer);
la j'ai une erreur C2440 impossible de convertir wchar t gc[] en char [8]
ou bien
public: static vers* ToString(Buffer, NbByteLu);
et la j'ai une erreur C2143 erreur de syntaxe absence de ; avant public,
please aidez moi car la je suis a cour d'idée
je parle chinois ou quoi ?
pourquoi tu n'utilises pas System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi ???
Partager