Ich versuche, einige Daten von einem C++-Server an einen C#-Client zu senden. Ich war in der Lage, über Char-Arrays zu senden. Aber es gibt einige Probleme mit Float-Array.
Dies ist der Code auf der C++-Server-Seite
float* arr;
arr = new float[12];
//array init...
if((bytecount = send(*csock, (const char*)arr, 12*sizeof(float), 0))==SOCKET_ERROR){
}
also ja, ich versuche, ein Float-Array der Größe 12 zu senden.
Hier ist der Code für die Client-Seite. (Es war seltsam, dass es keinen einfachen Weg gab, den Float aus dem Stream zu bekommen. Ich habe noch nie C# verwendet, und vielleicht gibt es etwas besser?)
//get the data in a char array
streamReader.Read(temp, 0, temp.Length);
//**the problem lies right here in receiving the data itself
//now convert the char array to byte array
for (int i = 0; i < (elems*4); i++) //elems = size of the float array
{
byteArray = BitConverter.GetBytes(temp[i]);
byteMain[i] = byteArray[0];
}
//finally convert it to a float array
for (int i = 0; i < elems; i++)
{
float val = BitConverter.ToSingle(byteMain, i * 4);
myarray[i] = val;
}
Schauen wir uns den Speicherauszug auf beiden Seiten an, und das Problem wird klar sein -
//c++ bytes corresponding to the first 5 floats in the array
//(2.1 9.9 12.1 94.9 2.1 ...)
66 66 06 40 66 66 1e 41 9a 99 41 41 cd cc bd 42 66 66 06 40
//c# - this is what i get in the byteMain array
66 66 06 40 66 66 1e 41 fd fd 41 41 fd 3d ? 42 66 66 06 40
Es gibt hier 2 Probleme auf der c#-Seite. 1) erstens verarbeitet es keine Daten über 0x80 (über 127) (inkompatible Strukturen?) 2) aus irgendeinem unglaublichen Grund fällt es ein Byte!!
und dies geschieht in "temp" direkt zum Zeitpunkt des Empfangs der Daten
Ich habe versucht, etwas herauszufinden, aber immer noch nichts. Haben Sie eine Idee, woran das liegen könnte? Ich bin sicher, ich mache etwas falsch... Haben Sie Vorschläge für eine bessere Vorgehensweise?
Herzlichen Dank!