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

c++代码转delphi代码

2012-03-17 
求助:c++代码转delphi代码将一段c++代码转成delphi代码共有3个方法C/C++ codeint TcpByteSendRec(int ipor

求助:c++代码转delphi代码
将一段c++代码转成delphi代码
共有3个方法

C/C++ code
int TcpByteSendRec(int iport,DWORD dwip, char *strDataOut,LPCTSTR strDataIn){    //准备发送的byte数据    char pstrOut[256];    memset(pstrOut,0,sizeof(pstrOut));    pstrOut[0]=0;    pstrOut[1]=strlen(strDataIn);    Gb2312ToUtf8(&(pstrOut[2]), 254, strDataIn, strlen(strDataIn));    //定义数据存放返回数据    char rebuff[256];    memset(rebuff,0,sizeof(rebuff));    //调用发送函数发送    int result=ReITCPSenByteDataReWD(iport,dwip,pstrOut,rebuff);  // 这个是调用dll 不用翻译     if (result!=0)    {        return result;    }    //对接收到的数据rebuff进行解析//得到解析后数据    int rebuffLen=rebuff[1];    Utf8ToGb2312(strDataOut,rebuffLen+1,&rebuff[2],rebuffLen+1);    return 0;}void Gb2312ToUtf8(char* pstrOut, u32 dwOutLen, const char* pstrIn, u32 dwInLen) {     int i = MultiByteToWideChar(CP_ACP, 0, pstrIn, -1, NULL, 0);     wchar_t * strSrc = new wchar_t[i+1];     MultiByteToWideChar(CP_ACP, 0, pstrIn, -1, strSrc, i);         i = WideCharToMultiByte(CP_UTF8, 0, strSrc, -1, NULL, 0, NULL, NULL);     if (i >= dwOutLen)     {         i = dwOutLen - 1;     }     WideCharToMultiByte(CP_UTF8, 0, strSrc, -1, pstrOut, i, NULL, NULL);     delete strSrc; } void Utf8ToGb2312(char* pstrOut, u32 dwOutLen, const char* pstrIn, u32 dwInLen) {     if (NULL == pstrOut)     {         return ;     }     int i = MultiByteToWideChar(CP_UTF8, 0, pstrIn, -1, NULL, 0);     wchar_t * strSrc = new wchar_t[i+1];     MultiByteToWideChar(CP_UTF8, 0, pstrIn, -1, strSrc, i);         i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);     if (i >= dwOutLen)     {         i = dwOutLen - 1;     }     WideCharToMultiByte(CP_ACP, 0, strSrc, -1, pstrOut, i, NULL, NULL);     delete strSrc; }


谢谢

[解决办法]
UTF8Decode可以直接转到UTF-8
[解决办法]
char* -> PChar
WideCharToMultiByte这个都是一样的
[解决办法]
指针用之前分配内存,c中char*对应delphi的AnsiChar

Delphi(Pascal) code
procedure Gb2312ToUtf8(pstrOut: PAnsiChar; dwOutLen: Integer; const pstrIn: PAnsiChar; dwInLen: Integer);var i: Integer;  strSrc: PWideChar;begin  i := MultiByteToWideChar(CP_ACP, 0, pstrIn, -1, nil, 0);  GetMem(strSrc, i * SizeOf(WideChar));  try    MultiByteToWideChar(CP_ACP, 0, pstrIn, -1, strSrc, i);    i := WideCharToMultiByte(CP_UTF8, 0, strSrc, -1, nil, 0, nil, nil);    if (i >= dwOutLen) then    begin      i := dwOutLen - 1;    end;    WideCharToMultiByte(CP_UTF8, 0, strSrc, -1, pstrOut, i, nil, nil);  finally    FreeMem(strSrc, i * SizeOf(WideChar));  end;end;procedure TForm1.btn2Click(Sender: TObject);var sengdata: PAnsiChar;  pstrOut: array[0..256] of AnsiChar;  PpstrOut: PAnsiChar;  rebuff: array[0..256] of AnsiChar;  rebuffLen: Integer;begin  sengdata := '1,0019,20120309174702,B42AA8C5A0A29AA952937FA657625A90';  FillChar(pstrOut, 256, 0);  pstrOut[0] := '0';  pstrOut[1] := AnsiChar(Length(sengdata));  Gb2312ToUtf8(@pstrOut[2], 254, sengdata, strlen(sengdata));  ShowMessage(pstrOut); //这里就错误   注释同样出现错误end; 

热点排行