我在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服务器接收数据,并且它接收正确数量的数据,并在屏幕上显示发送的确切字符串。所以问题不是服务器而是这个客户端,它无法正确读取或无法正确解析。
我该如何解决这个问题?
感谢.-
答案 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 );
}