Genhex - editeur hexadecimal [djgpp]

Description

Ce petit programme est capable de convertir un fichier en hexadecimal et de le réassembler par la suite. Il ne fait pas que l'hexadecimal mais aussi le decimal, l'octal et le binaire. Son utilisation est tres simple :

genhex.exe h fichier.ext
-> convertit fichier.ext en hexadecimal, mettez o/b/d a la place de 'h' pour convertir en autre chose que hexadecimal

genhex fichier.ext
-> réassemble le fichier

pour avoir les options completes téléchargez le programme et tapez seulement "genhex" dans la console sans aucun argument de plus.
Regardez l'image, c'est le code source du programme convertit en hexadecimal.

Source / Exemple :


#include					<io.h>
#include					<stdio.h>
#include					<fcntl.h>
#include					<string.h>
#include					<stdlib.h>
#include					<unistd.h>
#include					<sys/stat.h>

char						newread(int file)
{
	char					c;

	if (!_read(file,&c,1)) return 0;
	while ((c<=' ')||(c=='['))
	{
		if (c=='[')
		{
			while (c!=']')
			{
				if (!_read(file,&c,1)) return 0;
			}
		}
		if (!_read(file,&c,1)) return 0;
	}
	return c;
}

int						main(int argc,char **argv)
{
	int					i;
	int					i2;
	int					file;
	int					newfile;
	unsigned long				n;
	unsigned char				buffer[1024];

	if (argc==3)
	{
		if ((argv[1][0]!='b')&&(argv[1][0]!='o')&&(argv[1][0]!='d')&&(argv[1][0]!='h'))
		{
			printf("\"%c\" : caractère inconnu\r\n",argv[1][0]);
			return 0;
		}
		file=open(argv[2],O_RDONLY);
		if (file==-1)
		{
			close(file);
			printf("impossible d'ouvrir le fichier \"%s\"\r\n",argv[2]);
			return 0;
		}
		strncpy(buffer,argv[2],128-4);
		strcpy(argv[2],buffer);
		strcat(buffer,".txt");
		newfile=creat(buffer,S_IRUSR|S_IWUSR);
		if (newfile==-1)
		{
			close(file);
			close(newfile);
			printf("impossible de créer le fichier \"%s\"\r\n",buffer);
			return 0;
		}
		if (argv[1][1]=='.')
		{
			i=sprintf(buffer,"<%s><%c>\r\n",argv[2],argv[1][0]);
			_write(newfile,buffer,i);
		}
		else
		{
			i=sprintf(buffer,	"[ -------- FICHIER GENERE PAR GENHEX v1.0 -------- ]\r\n"
						"[  Tout ce qui se trouve entre crochets n'est pas  ]\r\n"
						"[  pris en compte par le programme.                ]\r\n"
						"[ ------------------------------------------------ ]\r\n"
						"\r\n"
						"[ nom du fichier une fois réassemblé :             ]\r\n"
						"<%s>\r\n"
						"\r\n"
						"[ (b)inaire, (o)ctal, (d)écimal ou (h)exadécimal : ]\r\n"
						"<%c>\r\n"
						"\r\n"
						"[ --------------- DEBUT DU FICHIER --------------- ]\r\n"
						,argv[2],argv[1][0]);
			if (argv[1][0]=='h') i+=sprintf(buffer+i,"[ Attention les lettres doivent etre en majuscules ]\r\n");
			i+=sprintf(buffer+i,"\r\n");
			_write(newfile,buffer,i);
			if (argv[1][1]!='n') _write(newfile,"[       0] ",11);
		}
		i=0;
		n=0;
		while (_read(file,buffer+8,1)==1)
		{
			n++;
			if (argv[1][0]=='b')
			{
				i++;
				buffer[7]=(buffer[8]&1)+'0';
				buffer[6]=((buffer[8]&2)>>1)+'0';
				buffer[5]=((buffer[8]&4)>>2)+'0';
				buffer[4]=((buffer[8]&8)>>3)+'0';
				buffer[3]=((buffer[8]&16)>>4)+'0';
				buffer[2]=((buffer[8]&32)>>5)+'0';
				buffer[1]=((buffer[8]&64)>>6)+'0';
				buffer[0]=(buffer[8]>>7)+'0';
				_write(newfile,buffer,8);
				if ((i==8)&&(argv[1][1]!='.'))
				{
					_write(newfile,"\r\n",2);
					if (argv[1][1]!='n')
					{
						if (argv[1][1]=='d') i=sprintf(buffer,"%ld",n);
						else i=sprintf(buffer,"%lX",n);
						_write(newfile,"[",1);
						for (i2=0 ; i2<8-i ; i2++) _write(newfile," ",1);
						_write(newfile,buffer,i);
						_write(newfile,"] ",2);
					}
					i=0;
				}
				else if (argv[1][1]!='.') _write(newfile," ",1);
			}
			if (argv[1][0]=='o')
			{
				i++;
				buffer[2]=(buffer[8]&7)+'0';
				buffer[1]=((buffer[8]&56)>>3)+'0';
				buffer[0]=(buffer[8]>>6)+'0';
				_write(newfile,buffer,3);
				if ((i==16)&&(argv[1][1]!='.'))
				{
					_write(newfile,"\r\n",2);
					if (argv[1][1]!='n')
					{
						if (argv[1][1]=='d') i=sprintf(buffer,"%ld",n);
						else i=sprintf(buffer,"%lX",n);
						_write(newfile,"[",1);
						for (i2=0 ; i2<8-i ; i2++) _write(newfile," ",1);
						_write(newfile,buffer,i);
						_write(newfile,"] ",2);
					}
					i=0;
				}
				else if (argv[1][1]!='.') _write(newfile," ",1);
			}
			if (argv[1][0]=='d')
			{
				i++;
				buffer[2]=buffer[8]%10;
				buffer[0]=buffer[8]/100+'0';
				buffer[1]=((buffer[8]%100)-buffer[2])/10+'0';
				buffer[2]+='0';
				_write(newfile,buffer,3);
				if ((i==16)&&(argv[1][1]!='.'))
				{
					_write(newfile,"\r\n",2);
					if (argv[1][1]!='n')
					{
						if (argv[1][1]=='d') i=sprintf(buffer,"%ld",n);
						else i=sprintf(buffer,"%lX",n);
						_write(newfile,"[",1);
						for (i2=0 ; i2<8-i ; i2++) _write(newfile," ",1);
						_write(newfile,buffer,i);
						_write(newfile,"] ",2);
					}
					i=0;
				}
				else if (argv[1][1]!='.') _write(newfile," ",1);
			}
			if (argv[1][0]=='h')
			{
				i++;
				buffer[1]=buffer[8]&15;
				buffer[0]=buffer[8]>>4;
				if (buffer[1]>9) buffer[1]+=55;
				else buffer[1]+='0';
				if (buffer[0]>9) buffer[0]+=55;
				else buffer[0]+='0';
				_write(newfile,buffer,2);
				if ((i==16)&&(argv[1][1]!='.'))
				{
					_write(newfile,"\r\n",2);
					if (argv[1][1]!='n')
					{
						if (argv[1][1]=='d') i=sprintf(buffer,"%ld",n);
						else i=sprintf(buffer,"%lX",n);
						_write(newfile,"[",1);
						for (i2=0 ; i2<8-i ; i2++) _write(newfile," ",1);
						_write(newfile,buffer,i);
						_write(newfile,"] ",2);
					}
					i=0;
				}
				else if (argv[1][1]!='.') _write(newfile," ",1);
			}
		}
		close(file);
		close(newfile);
	}
	else if (argc==2)
	{
		file=open(argv[1],O_RDONLY);
		if (file==-1)
		{
			close(file);
			printf("impossible d'ouvrir le fichier \"%s\"\r\n",argv[1]);
			return 0;
		}
		do
		{
			buffer[0]=newread(file);
			if (!buffer[0])
			{
				close(file);
				printf("fichier \"%s\" incomplet\r\n",argv[1]);
				return 0;
			}
		} while (buffer[0]!='<');
		i=-1;
		do
		{
			i++;
			buffer[i]=newread(file);
			if (!buffer[i])
			{
				close(file);
				printf("fichier \"%s\" incomplet\r\n",argv[1]);
				return 0;
			}
		} while (buffer[i]!='>');
		buffer[i]=0;
		newfile=creat(buffer,S_IRUSR|S_IWUSR);
		if (newfile==-1)
		{
			close(file);
			close(newfile);
			printf("impossible de créer le fichier \"%s\"\r\n",buffer);
			return 0;
		}
		do
		{
			buffer[0]=newread(file);
			if (!buffer[0])
			{
				close(file);
				printf("fichier \"%s\" incomplet\r\n",argv[1]);
				return 0;
			}
		} while (buffer[0]!='<');
		buffer[0]=newread(file);
		newread(file);
		if (buffer[0]=='h') while (1)
		{
			if (!(buffer[0]=newread(file)))
			{
				close(file);
				close(newfile);
				return 0;
			}
			if (!(buffer[1]=newread(file)))
			{
				close(file);
				close(newfile);
				printf("fichier \"%s\" incomplet, le fichier n'a pu etre genere correctement\r\n",argv[1]);
				return 0;
			}
			if ((buffer[0]<='F')&&(buffer[0]>='A')) buffer[0]-='A'-10;
			else if ((buffer[0]<='9')&&(buffer[0]>='0')) buffer[0]-='0';
			else
			{
				close(file);
				close(newfile);
				printf("fichier \"%s\" errone, le fichier n'a pu etre genere correctement\r\n",argv[1]);
				return 0;
			}
			if ((buffer[1]<='F')&&(buffer[1]>='A')) buffer[1]-='A'-10;
			else if ((buffer[1]<='9')&&(buffer[1]>='0')) buffer[1]-='0';
			else
			{
				close(file);
				close(newfile);
				printf("fichier \"%s\" errone, le fichier n'a pu etre genere correctement\r\n",argv[1]);
				return 0;
			}
			buffer[0]=(buffer[0]<<4)+buffer[1];
			_write(newfile,buffer,1);
		}
		else if (buffer[0]=='d') while (1)
		{
			if (!(buffer[0]=newread(file)))
			{
				close(file);
				close(newfile);
				return 0;
			}
			if (!(buffer[1]=newread(file)))
			{
				close(file);
				close(newfile);
				printf("fichier \"%s\" incomplet, le fichier n'a pu etre genere correctement\r\n",argv[1]);
				return 0;
			}
			if (!(buffer[2]=newread(file)))
			{
				close(file);
				close(newfile);
				printf("fichier \"%s\" incomplet, le fichier n'a pu etre genere correctement\r\n",argv[1]);
				return 0;
			}
			if ((buffer[0]<='9')&&(buffer[0]>='0')) buffer[0]-='0';
			else
			{
				close(file);
				close(newfile);
				printf("fichier \"%s\" errone, le fichier n'a pu etre genere correctement\r\n",argv[1]);
				return 0;
			}
			if ((buffer[1]<='9')&&(buffer[1]>='0')) buffer[1]-='0';
			else
			{
				close(file);
				close(newfile);
				printf("fichier \"%s\" errone, le fichier n'a pu etre genere correctement\r\n",argv[1]);
				return 0;
			}
			if ((buffer[2]<='9')&&(buffer[2]>='0')) buffer[2]-='0';
			else
			{
				close(file);
				close(newfile);
				printf("fichier \"%s\" errone, le fichier n'a pu etre genere correctement\r\n",argv[1]);
				return 0;
			}
			buffer[0]=100*buffer[0]+10*buffer[1]+buffer[2];
			_write(newfile,buffer,1);
		}
		else if (buffer[0]=='o') while (1)
		{
			if (!(buffer[0]=newread(file)))
			{
				close(file);
				close(newfile);
				return 0;
			}
			if (!(buffer[1]=newread(file)))
			{
				close(file);
				close(newfile);
				printf("fichier \"%s\" incomplet, le fichier n'a pu etre genere correctement\r\n",argv[1]);
				return 0;
			}
			if (!(buffer[2]=newread(file)))
			{
				close(file);
				close(newfile);
				printf("fichier \"%s\" incomplet, le fichier n'a pu etre genere correctement\r\n",argv[1]);
				return 0;
			}
			if ((buffer[0]<='7')&&(buffer[0]>='0')) buffer[0]-='0';
			else
			{
				close(file);
				close(newfile);
				printf("fichier \"%s\" errone, le fichier n'a pu etre genere correctement\r\n",argv[1]);
				return 0;
			}
			if ((buffer[1]<='7')&&(buffer[1]>='0')) buffer[1]-='0';
			else
			{
				close(file);
				close(newfile);
				printf("fichier \"%s\" errone, le fichier n'a pu etre genere correctement\r\n",argv[1]);
				return 0;
			}
			if ((buffer[2]<='7')&&(buffer[2]>='0')) buffer[2]-='0';
			else
			{
				close(file);
				close(newfile);
				printf("fichier \"%s\" errone, le fichier n'a pu etre genere correctement\r\n",argv[1]);
				return 0;
			}
			buffer[0]=(buffer[0]<<6)+(buffer[1]<<3)+buffer[2];
			_write(newfile,buffer,1);
		}
		else if (buffer[0]=='b') while (1)
		{
			if (!(buffer[0]=newread(file)))
			{
				close(file);
				close(newfile);
				return 0;
			}
			for (i=1 ; i<8 ; i++)
			{
				if (!(buffer[i]=newread(file)))
				{
					close(file);
					close(newfile);
					printf("fichier \"%s\" incomplet, le fichier n'a pu etre genere correctement\r\n",argv[1]);
					return 0;
				}
			}
			for (i=0 ; i<8 ; i++)
			{
				if (buffer[i]=='1') buffer[i]=1;
				else if (buffer[i]=='0') buffer[i]=0;
				else
				{
					close(file);
					close(newfile);
					printf("fichier \"%s\" errone, le fichier n'a pu etre genere correctement\r\n",argv[1]);
					return 0;
				}
			}
			buffer[0]=(buffer[0]<<7)+(buffer[1]<<6)+(buffer[2]<<5)+(buffer[3]<<4)+(buffer[4]<<3)+(buffer[5]<<2)+(buffer[6]<<1)+buffer[7];
			_write(newfile,buffer,1);
		}
		close(file);
		close(newfile);
	}
	else
	{
		printf(	"\r\n"
			"Utilisation : %s XY fichier.ext\r\n"
			"\r\n"
			"X peut etre :\r\n"
			"h               hexadecimal\r\n"
			"d               decimal\r\n"
			"o               octal\r\n"
			"b               binaire\r\n"
			"\r\n"
			"Y (optionnel) peut etre :\r\n"
			"n               ne pas indiquer la position dans le fichier\r\n"
			"d               indique la position dans le fichier en decimal\r\n"
			".               aucune indication en plus du code genere\r\n"
			"\r\n"
			"exemple : %s hn truc.bmp\r\n"
			"-> convertit 'truc.bmp' en hexadecimal sans indiquer la position dans le programme a chaque ligne\r\n"
			"\r\n"
			"pour reconvertir le fichier contenant le code, rien de plus simple :\r\n"
			"%s fichier.ext.txt\r\n"
			"\r\n"
			"attention, les parametres entre '<' et '>' doivent etre present dans le fichier !\r\n"
			,argv[0],argv[0],argv[0]);
	}

	return 0;
}

Conclusion :


voila !

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.