Я пытаюсь отправить некоторые данные с сервера C ++ клиенту C #.Я был в состоянии отправить массивы символов.Но есть некоторая проблема с массивом с плавающей точкой.
Это код на стороне сервера C ++
float* arr;
arr = new float[12];
//array init...
if((bytecount = send(*csock, (const char*)arr, 12*sizeof(float), 0))==SOCKET_ERROR){
}
, так что да, я пытаюсь отправить массив с плавающей запятой размером 12.
вот код дляна стороне клиента.(было странно, что не было простого способа вытащить float из потока, во-первых. Я никогда раньше не использовал C # и, может быть, есть что-то лучше?)
//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;
}
давайте посмотрим на памятьдамп с обеих сторон, и проблема будет понятна -
//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
здесь есть 2 проблемы на стороне c # - 1) сначала он не обрабатывает ничего выше 0x80 (выше 127) (несовместимые структуры?) 2) по какой-то невероятной причине он сбрасывает байт !!
, и это происходит в 'temp' прямо во время получения данных
Я пытался что-то выяснить, но пока ничего,У вас есть идеи, почему это может происходить?Я уверен, что я делаю что-то не так ... Предложения для лучшего подхода?
Большое спасибо