webForumDet fria alternativet

Formatera text

7 svar · 410 visningar · startad av Alpha II

Alpha IIMedlem sedan maj 20002 993 inlägg
#1

Jag skulle vilja använda sprintf för att skriva ut en BYTE i hexadecimal. Hur gör jag det? :q

Alpha IIMedlem sedan maj 20002 993 inlägg
#2

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"

PeWMedlem sedan juni 200010 432 inlägg
#3

Du får nog använda itoa och ange radix som 16. En array av byte är lika med en array av chars, så du får iterera arrayen och ta byte för byte, samt köra din sprintf ;)

Alpha IIMedlem sedan maj 20002 993 inlägg
#4

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);
		}
PeWMedlem sedan juni 200010 432 inlägg
#5

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).

Alpha IIMedlem sedan maj 20002 993 inlägg
#6

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);
PragmaMedlem sedan juni 200318 inlägg
#7

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;
}
Alpha IIMedlem sedan maj 20002 993 inlägg
#8

tack :)

646 ms totalt · 3 externa anrop · v20260731065814-full.30151723
524 ms — hämta forumlista (db)
121 ms — hämta statistik (db)
128 ms — hämta tråd, inlägg och bilagor (db)