title: Send float array from C++ server to C# client
body: <p>I'm trying to send some data from a C++ server to a C# client. I was able to send over char arrays. But there is some problem with float array. </p>
  
  <p>This is the code on the C++ server side</p>
  
  <pre><code>float* arr;
  arr = new float[12];
  //array init...
  if((bytecount = send(*csock, (const char*)arr, 12*sizeof(float), 0))==SOCKET_ERROR){
  }
  </code></pre>
  
  <p>so yes i'm trying to send over a float array of size 12.</p>
  
  <p>here's the code for the client side. (it was strange that there was no easy way to get the float out of the stream in the first place. I have never used C# before and maybe there's something better?)</p>
  
  <pre><code>//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 &lt; (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 &lt; elems; i++)
  {
      float val = BitConverter.ToSingle(byteMain, i * 4);
      myarray[i] = val;
  }
  </code></pre>
  
  <p>let's look at the memory dump on both sides and the problem will be clear -</p>
  
  <pre><code>//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
  </code></pre>
  
  <p>there are 2 problems here on the c# side-
  1) first it does not handle anything above 0x80 (above 127) (incompatible structures?)
  2) for some unbelievable reason it drops a byte!!</p>
  
  <p>and this happens in 'temp' right at the time of receiving the data</p>
  
  <p>I've been trying to figure something out but nothing still.
  Do you have any idea why this might be happening? I'm sure I'm doing something wrong...
  Suggestions for a better approach?</p>
  
  <p>Thanks a lot</p>