Кислый, боже что это?! Как оно должно работать?!
Короче исправь это:
Код:
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]);