title: C++ write binary file. uchar* data from opencv matrices
body: <p>I have some data, n elements, uchar* data_ptr. How would I write this to a binary file and read it again later?</p>
  
  <p>I tried the following :</p>
  
  <pre><code>std::ofstream myFile ("data.bin", std::ios::out | std::ios::binary);
  myFile.write(data_ptr,100); 
  </code></pre>
  
  <p>Above won't compile. uchar not being char. </p>
  
  <p>How do I write it. And how to I read it into a memory chunk of uchar* again.</p>
  
  <p>I did the following test:</p>
  
  <pre><code>cv::Mat test(10,10,CV_8UC1);
  cv::randu(test,0,255);
  std::cout &lt;&lt; test &lt;&lt; std::endl;
  assert(test.isContinuous());
  
  std::ofstream myFile1 ("data1.bin", std::ios::out | std::ios::binary);
  myFile1.write(reinterpret_cast&lt;char*&gt;(test.data),sizeof(uchar)*100);
  
  uchar buf[100];
  std::ifstream myFile ("data1.bin", std::ios::in | std::ios::binary);
  myFile.read(reinterpret_cast&lt;char*&gt;(buf), sizeof(buf));
  cv::Mat test1(10,10,CV_8UC1,buf);
  std::cout &lt;&lt; test1 &lt;&lt; std::endl;
  
  cv::waitKey();
  </code></pre>
  
  <p>And got the following output:</p>
  
  <pre><code>[91, 2, 79, 179, 52, 205, 236, 8, 181, 239;
    26, 248, 207, 218, 45, 183, 158, 101, 102, 18;
    118, 68, 210, 139, 198, 207, 211, 181, 162, 197;
    191, 196, 40, 7, 243, 230, 45, 6, 48, 173;
    242, 125, 175, 90, 63, 90, 22, 112, 221, 167;
    224, 113, 208, 123, 214, 35, 229, 6, 143, 138;
    98, 81, 118, 187, 167, 140, 218, 178, 23, 43;
    133, 154, 150, 76, 101, 8, 38, 238, 84, 47;
    7, 117, 246, 163, 237, 69, 129, 60, 101, 41;
    190, 50, 90, 72, 168, 109, 121, 220, 114, 248]
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
    0, 0, 0, 0, 0, 0, 127, 2, 0, 0;
    32, 0, 0, 0, 255, 255, 0, 0, 178, 116;
    36, 101, 35, 0, 28, 5, 248, 227, 87, 0;
    43, 0, 0, 0, 0, 0, 0, 0, 0, 0;
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
    0, 0, 205, 18, 246, 118, 251, 10, 251, 118]
  </code></pre>
  
  <p>Clearly the two matrices are not the same. Any comment on where it went wrong?</p>