截取封包程序显示的是16进制的文本,如何把他还原为BYTE*
也就是封包数据内容的原型

解决方案 »

  1.   


    逐位转化
    ss[i]=Str[i]-'0' CStringm_szStr=_T("ThisisaTest,这是一个测试");
    BYTEm_data[1024];
    memcpy((void*)m_data,m_szStr.GetBuffer(1024),1024)
      

  2.   


    UpdateData(true);
    int ilen = m_edit1.GetLength();
    BYTE * m_packBuf = new BYTE[ilen+1/3];
    char* p;
    char* s;
    char* d= " ";
    s = m_edit1.GetBuffer(ilen);
    p=strtok(s,d);
    int x = 0;
    int y = 0;
    int i = 0;
    m_edit2 = "";
    while(p)
    {
    x=0;
    y=0;
    char a[2]={0};
    for(int ilen=0;p[ilen]!=0;ilen++)
    {

    switch(ilen)
    {
    case 0:
    a[0] = m_edit1.GetAt(i*2);
    break;
    case 1:
    a[1]=m_edit1.GetAt(i*2+1);
    break;
    }
    }
    BYTE tmp=BYTE(strtol(a, NULL, 16));
    m_packBuf[i] = tmp;
    //m_edit2+=tmp;
    i++;
    p = strtok(NULL,d);
    }edit1里面的内容为 C1 06 F4 03 15 00,也就是截取封包软件显示的格式
      

  3.   

    char* CDataManager::WToA(WCHAR* wString)
    {
    if (wString == NULL)
    {
    return NULL;
    }
    size_t wLen = wcslen( wString ) + 1; 
    int aLen=WideCharToMultiByte(CP_UTF8,0,wString,wLen,NULL,0,NULL,NULL); char* lpa = new char [aLen]; WideCharToMultiByte(CP_UTF8,0,wString,wLen,lpa,aLen,NULL,NULL);  return lpa;}
    WCHAR* CDataManager::AToW(char* String)
    {
    if (String == NULL)
    {
    return NULL;
    }
    size_t aLen = strlen( String ) + 1;
    int wLen = MultiByteToWideChar(CP_UTF8,0,String,aLen,NULL,0);
    WCHAR* lpw = new WCHAR [wLen];
    MultiByteToWideChar(CP_UTF8,0,String,aLen,lpw,wLen); 
    return lpw;}这个是wchar互转utf-8的,如果你要wchar互转ansi,可以把CP_UTF8改成CP_ACP,