Показать сообщение отдельно
Старый 17.11.2010, 17:53   #48
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Кислый, боже что это?! Как оно должно работать?!
Короче исправь это:
Код:
void view_pkt(char buff[], int len, int from_server)
{
    //var
    int lines, i, i1;
    char s[256];

    if (from_server){strcpy(s, "Сервер");}
    else            {strcpy(s, "Клиент");}

    sprintf(s, "%s, Length:  %d (0x%.*X)\n", s, len, 2, len);

    ToLog(s);
    ToLog(" -- -- -- -- -- -- -- \n");
    //view_pkt
    lines = len / 16;
    int mod = len % 16;
    int il  = i1 + i *16;
    if (mod>0) { lines++ ;}
    for (i = 0; i < lines; i++)
    {
        sprintf(s, "\n0x%.*X| ", 4, 16*i);
        for (i1 = 0; i1 < 16; i1++)
            {
                if (il >= len)
                    {
                        sprintf(s, "%s ", s);
                    }
		else sprintf(s, "%s %.*X", s, 2, buff[i1+16*i]);
		sprintf(s, "%s ", s);
	    }
	ToLog(s);
    }
    ToLog("  \n");
}
на это:
Код:
char * StringToHex(char * s, int len)
{
  char *ahex = "0123456789ABCDEF";
  char *r = new char[len*3+3];

  for(int i=0; i<len; i++){
    r[i*3]=ahex[(((UINT8)s[i]) >> 4) & 0xf];
    r[i*3+1]=ahex[((UINT8)s[i]) & 0xf];
    r[i*3+2]=' ';
  }
  r[len*3]='\r';
  r[len*3+1]='\n';
  r[len*3+2]=0;
  return r;
}

void view_pkt(char buff[], int len, int from_server)
{
    //var
    int lines, i, i1;
    char s[256];

    if (from_server){strcpy(s, "Сервер");}
    else            {strcpy(s, "Клиент");}

    sprintf(s, "%s, Length:  %d (0x%.*X)\n", s, len, 2, len);

    ToLog(s);
    ToLog(" -- -- -- -- -- -- -- \n");
    //view_pkt
    lines = len / 16;
    int mod = len % 16;
    int il  = i1 + i *16;
    if (mod>0) { lines++ ;}
    for (i = 0; i < lines; i++)
    {
        if((mod>0)&&(i+1==lines))
          sprintf(s, "\n0x%.*X| %s", 4, 16*i, StringToHex(&buff[16*i],mod));
        else
          sprintf(s, "\n0x%.*X| %s", 4, 16*i, StringToHex(&buff[16*i],16));
	ToLog(s);
    }
    ToLog("  \n");
}
ну или как ты сам написал
sprintf(s, "%s %.*X", s, 2, buff[i1+16*i]);
на
sprintf(s, "%s %.*X", s, 2, (unsined char)buff[i1+16*i]);
__________________
Я здесь практически не появляюсь!, Skype - ikskor

Последний раз редактировалось xkor, 17.11.2010 в 17:55.
xkor вне форума   Ответить с цитированием