C++サーバーからC#クライアントにデータを送信しようとしています。私はchar配列を送ることができました。しかし、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#を使用したことがないし、多分もっと良いものがあります。最初の場所でストリームからfloatを取得する簡単な方法がなかったのは奇妙だった?)
//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
のC#のここ2つの問題がある側 - 1)最初のそれは127以上が0x80以上何も()(互換性のない構造を処理しません) 2)のために?いくつか信じられないほどの理由でそれはバイトを落とす!
が、これは右の私はまだ何か出て何もを把握しようとしてきたデータ
を受信した時に「TEMP」で行われます。 これがなぜ起こっているのかご存じですか?私は何か間違っていると確信しています... より良いアプローチのための提案?
どうもありがとう
'StreamReader'は' System.IO.StreamReader()として定義されています。ええ、私は 'BinaryReader'が良い選択肢かもしれないと思います。ありがとう、私はそれを試してみましょう。 –
sg88
ありがとうございます!試してみた - それは – sg88