Estoy tratando de enviar algunos datos de un servidor C++ a un cliente C#. Pude enviar matrices de caracteres. Pero hay algún problema con la matriz flotante.Enviar matriz flotante del servidor C++ al cliente C#
Este es el código del lado del servidor C++
float* arr;
arr = new float[12];
//array init...
if((bytecount = send(*csock, (const char*)arr, 12*sizeof(float), 0))==SOCKET_ERROR){
}
por lo que sí que estoy tratando de enviar a través de una red de flotadores de tamaño 12.
aquí está el código del lado del cliente. (Que era extraño que no había manera fácil de obtener el flotador fuera de la corriente en el primer lugar. Nunca he utilizado C# antes y tal vez hay algo mejor?)
//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;
}
veamos la memoria volcar en ambos lados y el problema quedará claro -
//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
hay 2 problemas aquí en la C# secundarios 1) en primer lugar que no se ocupa de nada por encima de 0x80 (por encima de 127) (estructuras incompatibles) 2) para? ¡alguna razón increíble, cae un byte!
y esto sucede en 'temp' correcto en el momento de recibir los datos
He estado tratando de encontrar algo mejor, pero nada todavía. ¿Tiene alguna idea de por qué esto podría estar pasando? Estoy seguro de que estoy haciendo algo mal ... ¿Sugerencias para un mejor enfoque?
Muchas gracias
'StreamReader' se define como' System.IO.StreamReader () '. Sí, creo que 'BinaryReader' podría ser una mejor opción. Gracias déjame probarlo. –
sg88
gracias !! probado y probado - funciona – sg88