Jag skulle vilja använda sprintf för att skriva ut en BYTE i hexadecimal. Hur gör jag det? :q
Formatera text
7 svar · 410 visningar · startad av Alpha II
Ingen som kan hjälpa mig? :(
Har en array av BYTE som jag vill skriva ut varje värde av på en rad med mellanslag i mellan.
Typ:
"C4 02 FF 00 1D"
Testade med den här koden. Det kompilerar men kraschar. :(
char hexbuf[256];
for(int i=0;i<aLen-1;i++)
{
char tmpbuf[5];
itoa(aPacket[i],tmpbuf,16);
sprintf(hexbuf,"%s %s",hexbuf, tmpbuf);
}
Vad är aPacket för datatyp? Om du sänder med den tas den som en integer för varje indexering (enligt itoas definition). Vilket innebär att 4 bytes läses varje gång. Om den är en array där du vill bara läsa varje byte bör du nog kopiera detta byte till en variabel av typ integer först, för att det ska fungera. I annat fall blir det fel och innan loopen är slut så läses byten som inte är definierade (vilket i bästa fall resulterar i krasch).
Efter mycket försök hit o dit lyckades jag uppnå det resultat jag ville ha. Koden blev kanske inte så snygg :l Kan man göra det på något annat sätt? Det är hemskt jobbigt o sitta o testa olika saker eftersom det är en dll fil som körs genom Diablo2 (d2hackit). Så varje gång det blir något knas kraschar hela Diablo 2 och jag får starta upp det igen, ladda d2hackit och ladda mitt plugin :(
char hexbuf[256] = { '\0' };
char hex[5] = { '\0' };
for(int i=0;i<aLen;i++)
{
itoa(aPacket[i],hex,16);
if(strlen(hex)==1)
{
hex[1] = hex[0];
hex[0] = '0';
hex[2] = '\0';
}
strcat(hexbuf, " ");
strcat(hexbuf,hex);
}
strupr(hexbuf);
Tjena!
Jag satt här på småtimmarna & slängde ihop lite kod som konverterar till hex med mellanrum mellan varje värde.
Hoppas att det hjälper...
#include <stdio.h> // sprintf(...)
#include <string.h> // strlen(...)
int main(int argc, char* argv[])
{
char szBuffer[256]={0};
char hex[5]={'A','B','C','D','E'};
char format[] = "%02hx%3.0s";
for(int i =0; i < 5; i++)
// Konvertera till bas 16 med space mellan varje hexadecimalt värde...
// OBS!! Mellanrum läggs till även på sista elementet.
sprintf (szBuffer+strlen(szBuffer),format,hex[i]);
return 0;
}
tack :)