首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++与C#通过named pipe 进行数据通讯有关问题

2012-03-27 
C++与C#通过named pipe 进行数据通讯问题我使用namedpipe在程序中进行C++程序和C#程序的通信。但是从C#程序

C++与C#通过named pipe 进行数据通讯问题
我使用namedpipe在程序中进行C++程序和C#程序的通信。但是从C#程序这边传的数据收到的时候确实乱码。这是怎么回事呢?
我用的转换的程序在下面:
VOID GetAnswerToRequest( LPTSTR pchRequest, 
  LPTSTR pchReply, 
  LPDWORD pchBytes )
{
_tprintf( TEXT("message received:\"%s\"\n"), pchRequest );
_tprintf( TEXT("CP_UTF8:\"%s\"\n"), encode(pchRequest,CP_UTF8) );
_tprintf( TEXT("CP_UTF7:\"%s\"\n"), encode(pchRequest,CP_UTF7) );
_tprintf( TEXT("CP_ACP:\"%s\"\n"), encode(pchRequest,CP_ACP) );
_tprintf( TEXT("CP_OEMCP:\"%s\"\n"), encode(pchRequest,CP_OEMCP) );
_tprintf( TEXT("CP_MACCP:\"%s\"\n"), encode(pchRequest,CP_MACCP) );
_tprintf( TEXT("CP_THREAD_ACP:\"%s\"\n"), encode(pchRequest,CP_THREAD_ACP) );
enum eMessage msg;
if(0==strcmp(encode(pchRequest,CP_UTF8),"hello"))
msg = hello;

  // Check the outgoing message to make sure it's not too long for the buffer.
  if (FAILED(StringCchCopy( pchReply, BUFSIZE, TEXT("default answer from server") )))
  {
  *pchBytes = 0;
  pchReply[0] = 0;
  printf("StringCchCopy failed, no outgoing message.\n");
  return;
  }
  *pchBytes = (lstrlen(pchReply)+1)*sizeof(TCHAR);
}
最奇怪的我传一个数据的时候第一次读出来是一个笑脸图标第二次才是正确的。那位大侠帮忙看看是怎么回事?谢谢了。

[解决办法]
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。

C/C++ code
void HexDump(char *buf,int len) {    int i,j,k;    char binstr[80];    for (i=0;i<len;i++) {        if (0==(i%16)) {            sprintf(binstr,"%04x -",i);            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);        } else if (15==(i%16)) {            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);            sprintf(binstr,"%s  ",binstr);            for (j=i-15;j<=i;j++) {                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');            }            printf("%s\n",binstr);        } else {            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);        }    }    if (0!=(i%16)) {        k=16-(i%16);        for (j=0;j<k;j++) {            sprintf(binstr,"%s   ",binstr);        }        sprintf(binstr,"%s  ",binstr);        k=16-k;        for (j=i-k;j<i;j++) {            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');        }        printf("%s\n",binstr);    }} 

热点排行