Liverion
Messages postés296Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention18 août 2008
-
25 avril 2008 à 11:28
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
30 avril 2008 à 23:44
Bonjour,
je voudrais ameliorer un programme que j'ai concu, qui fonctionne mais qui est un peu lourd :
Je dois envoyer a un serveur des donnees pour une simulation, mes donnees sont stockées dans un byte[140] et le serveur veut recuperer une String
Je commence donc par recuperer tout les bytes dans une chaine :
privatestring[] getByteStringFromByteArray(byte[] value)
{
// Conversion of the byte array to a string
String infos = BitConverter.ToString(value);
// put the "infos" string into the "toNadasData" array
toNadasData.Add(infos);
// a char array to use the "-" caracter as a separatorchar[] tiret = newchar[1];
tiret[0] = '-';
return infos.Split(tiret);
}
( la ligne "toNadasData.Add(infos);" sert uniquement a garder en memoire les chaines contenant les bytes )
Ensuite mon souci vient du fait que mon serveur prend en fait chaque caractère de la chaine pour recuperer les informations utiles a la simulation, mais que lui ne doit pas etre ecrit en C#, puisque pour le faire fonctionner il faut que je transforme 2 bytes en un caractère Unicode (par exemple si j'ai ma chaine de byte qui fait "0A 15 2C 6D ..." je dois transmettre "\u150A \u6D2C ..."
Je gere actuellement cela avec ces deux fonctions :
_ Celle ci dans ma classe principale :
privatestring prepareStringForSending(string[] value)
{
String sentString = "";
for (int i = 0; i < value.Length; i += 2)
// changing 2 bytes written into string in a UTF-16 character for sending it to the server
sentString += dataFromFile.getUnicodeFromString(value[i + 1], value[i]);
// "End of string" character
sentString += "\u0009";
return sentString;
}
_ Qui appelle celle ci :
publicstring getUnicodeFromString(stringvalue1, stringvalue2)
{
string var = "";
switch (value1)
{
case "00": switch (value2)
{
case "00": var = "u0000"; break;
case "01": var = "\u0001"; break;
case "02": var = "\u0002"; break;
case "03": var = "\u0003"; break;
case "04": var = "\u0004"; break;
case "05": var = "\u0005"; break;
case "06": var = "\u0006"; break;
...
case "FA": var = "\uFFFA"; break;
case "FB": var = "\uFFFB"; break;
case "FC": var = "\uFFFC"; break;
case "FD": var = "\uFFFD"; break;
case "FE": var = "\uFFFE"; break;
case "FF": var = "\uFFFF"; break;
};
break;
default: var = "\u0000"; break;
}
return var;
}
Comme vous vous en doutez, un switch sur 2 bytes ca pese lourd, donc si quelqu'un avait une idée pour faire ca d'une autre manière, cela m'interesserait.
Liverion
Messages postés296Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention18 août 2008 25 avril 2008 à 12:29
Désolé pour la mocheté du code, je l'avais pourtant passé au coloriseur, je le remet donc :
private string[] getByteStringFromByteArray(byte[] value)
{
// Conversion of the byte array to a string
String infos = BitConverter.ToString(value);
// put the "infos" string into the "toNadasData" array
toNadasData.Add(infos);
// a char array to use the "-" caracter as a separator
char[] tiret = new char[1];
tiret[0] = '-';
returninfos.Split(tiret);
}
private string prepareStringForSending(string[] value)
{
String sentString = "";
for(int i = 0; i < value.Length; i += 2)
// changing 2 bytes written into string in a UTF-16 character for sending it to the server
sentString += dataFromFile.getUnicodeFromString(value[i + 1], value[i]);
// "End of string" character
sentString += "\u0009";
returnsentString;
}
public stringgetUnicodeFromString(string value1, stringvalue2)
{
string var = "";
switch(value1)
{
case"00": switch (value2)
{
case"00": var = "\u0000"; break;
case"01": var = "\u0001"; break;
case"02": var = "\u0002"; break;
case"03": var = "\u0003"; break;
case"04": var = "\u0004"; break;
case"05": var = "\u0005"; break;
case"06": var = "\u0006"; break;
...
case"FA": var = "\uFFFA"; break;
case"FB": var = "\uFFFB"; break;
case"FC": var = "\uFFFC"; break;
case"FD": var = "\uFFFD"; break;
case"FE": var = "\uFFFE"; break;
case"FF": var = "\uFFFF"; break;
};
break;
default: var = "\u0000"; break;
}
returnvar;
}
Liverion
Messages postés296Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention18 août 2008 27 avril 2008 à 01:45
En fait actuellement le seul souci que j'ai c'est que je recupere soit 2 bytes soit 4 caractères dans un chaine ( A3 BC ou alors "A3-BC" ) et que je dois parvenir a les transformer en : "\uBCA3"
mon tableau de byte contenant 140 bytes, je dois obtenir une chaine qui contient 70 caractères + le caractère fin de ligne
au depart j'avais essayé d'ecrire quelque chose comme :
String sentString = "\u"+infos[1]+infos[0] ... mais il n'appreciait pas le \u, il me disait qu'il ne connaissait pas cette sequence, pas comme \n par exemple.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Liverion
Messages postés296Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention18 août 2008 28 avril 2008 à 10:03
Je vais essayer ca en mettant une iteration après le Split pour traiter mes 140 bytes d'un coup, et je viens donner le resultat ^^
Merci pour le coup de main ;)
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 30 avril 2008 à 23:44
Je me sert du CultureInfo dans mes appels à Byte.TryParse.
Ca permet de spécifier explicitement la culture à utiliser plutot que de prendre la culture courante.