我想從C++服務器發送一些數據到C#客戶端。我能夠發送字符數組。但浮點數組存在一些問題。發送float數組從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)?一些令人難以置信的原因,它降低了一個字節!
,這發生在「臨時」就在接收到數據
我一直在試圖找出仍然出來的東西,但沒有時間。 你知道爲什麼會發生這種情況嗎?我敢肯定我做錯了什麼... 建議更好的方法?
非常感謝
'StreamReader'被定義爲'System.IO.StreamReader()'。是的,我認爲'BinaryReader'可能是一個更好的選擇。謝謝,讓我試試看。 –
sg88
謝謝!!嘗試和測試它 - 它的作品 – sg88