MQL - 数据读取不正确或数据解析不正确:整数数组到Char数组缓冲区

时间:2015-07-24 18:31:26

标签: java arrays named-pipes

我在MQL中工作以从NamedPipes接收一些数据。通信工作正常,数据已收到,但我遇到了将数据从整数数组转换为实际发送的字符串消息的问题。

以下是我正在使用的代码:

string StringFromBuffer(int &buffer[], int length) {
   string message = "";
   for ( int i = 0; i < length; i++ ) {
      int c = buffer[i / 4];
      int off = i % 4;
      int shift = 0;
      if ( off == 1 )
         shift = 8;
      else if ( off == 2 )
         shift = 16;
      else if ( off == 3 )
         shift = 24;
      c = (c >> shift) & 0xff;
      message = message + CharToStr( c );
   }       
   return( message );
}

这应该从整数缓冲区返回消息,但是当我从NamedPipes服务器发送字符串“1234567890”然后客户端接收(或转换接收到的数据)这个“12345678”时会发生这种情况。因此,它不是解析10个数字,而是只检索其中的8个。现在,如果我再次发送相同的数字序列“1234567890”,那么客户端接收(或解析)它没有解析前一个消息加上8个数字的最后两个数字,然后在屏幕上显示:“9012345678 ”。如果我重复序列,我会继续得到相同的值,前8个数字,然后是10个数字,依此类推。

我知道NamedPipes正在发送正确的字符串,因为我还有一个Java NamedPipes客户端,它从同一个NamedPipes服务器接收数据,并且它接收正确数量的数据,并在屏幕上显示发送的确切字符串。所以问题不是服务器而是这个客户端,它无法正确读取或无法正确解析。

我该如何解决这个问题?

感谢.-

1 个答案:

答案 0 :(得分:0)

为什么不使用简单的“IntegerToString”功能? (http://docs.mql4.com/convert/integertostring

string StringFromBuffer(int buffer[], int length) {
   string message = "";
   for ( int i = 0; i < length; i++ ) {
      message = message + IntegerToString( buffer[i] );
   }       
   return( message );
}