Salut Je développe une application cliente en C# et le serveur est écrit en C++int [] à chaîne C#
le serveur utilise:
inline void StrToInts(int *pInts, int Num, const char *pStr)
{
int Index = 0;
while(Num)
{
char aBuf[4] = {0,0,0,0};
for(int c = 0; c < 4 && pStr[Index]; c++, Index++)
aBuf[c] = pStr[Index];
*pInts = ((aBuf[0]+128)<<24)|((aBuf[1]+128)<<16)|((aBuf[2]+128)<<8)|(aBuf[3]+128);
pInts++;
Num--;
}
// null terminate
pInts[-1] &= 0xffffff00;
}
pour convertir une chaîne en int []
dans mon C# client je reçois:
int[4] { -14240, -12938, -16988, -8832 }
Comment puis-je convertir le tableau arrière à une chaîne? Je ne veux pas utiliser de code dangereux (par exemple, des pointeurs) N'importe lequel de mes essais a abouti à des chaînes illisibles.
EDIT: Voici un de mes approch:
private string IntsToString(int[] ints)
{
StringBuilder s = new StringBuilder();
for (int i = 0; i < ints.Length; i++)
{
byte[] bytes = BitConverter.GetBytes(ints[i]);
for (int j = 0; j < bytes.Length; j++)
s.Append((char)(bytes[j] & 0x7F));
}
return s.ToString();
}
Je sais que je dois prendre soin de endianess mais que le serveur est en cours d'exécution sur ma machine locale et le serveur aussi, je suppose que cela est Pas de problème.
Mon autre essai a consisté à utiliser une structure avec une disposition explicite et le même FieldOffset pour les entiers et les caractères, mais cela ne fonctionne pas non plus.
À quoi devrait ressembler la chaîne de résultats? –
Qu'avez-vous essayé jusqu'à présent? S'il vous plaît partager votre code, je m'attends à quelque chose ce qui fait déjà tous les changements de bits – sll
Voulez-vous retourner un tableau de chaîne ou une seule chaîne (csv) –