Developpez.com

Télécharger gratuitement le magazine des développeurs, le bimestriel des développeurs avec une sélection des meilleurs tutoriels

FAQ ASP.NET/C#Consultez toutes les FAQ

Nombre d'auteurs : 39, nombre de questions : 371, dernière mise à jour : 22 septembre 2007 

 
OuvrirSommaireCoté serveur et C#Conversions

Voici une fonction permettant de convertir une valeur en base 10 vers une base n.

 
Sélectionnez

private static int increment = 64;
public static string ToBaseN(int nombre, int _base)
{
	int reste;
	string chaine = string.Empty;
	while (nombre >= _base)
	{
		reste = nombre % _base;
		nombre = (nombre - reste)/_base;
		if (reste > 9)
		{
			chaine = ((char)(reste - 9 + increment)).ToString() + chaine;
		}
		else
		{
			chaine = reste.ToString() + chaine;
		}
	}
	if (nombre > 9)
	{
		chaine = ((char)(nombre - 9 + increment)).ToString() + chaine;
	}
	else
	{
		chaine = nombre.ToString() + chaine;
	}
	return chaine.ToUpper();
}
				

Conseil: limitez la conversion à la base 36 afin de ne devoir utiliser que les caractères alphanumériques.

Créé le 3 octobre 2005  par neguib

Pour mieux comprendre, je vous propose 3 petites étapes qui, au final, vous permettront de traduire sans difficultés une chaine de caractères hexadecimaux; Ceci par l'utilisation notamment de la fonction FromHex de la classe System.Uri

1. Partons du principe qu'un byte est representé par une chaine de 2 caractères hexadecimaux.
Voici deux petites fonctions static verifiant pour nous si la longueur d'une chaine de caractères hexadecimaux est paire ou impaire, puis transformant la chaine hexadecimale en paires de caractères hexadecimaux:

 
Sélectionnez

public static bool IsEven(string hexString)
{
	return hexString.Length % 2 == 0;
}

public static string[] ToEvenByteStrings(string hexString)
{
	if (!IsEven(hexString))
	{
		hexString = "0" + hexString;
	}
	int currentChar = 0;
	int index = 0;
	int max = hexString.Length;
	string[] byteStrings = new string[Convert.ToInt32(max / 2) - 1];
	while (currentChar < max)
	{
		byteStrings(index) = hexString.Substring(currentChar, 2);
		index += 1;
		currentChar += 2;
	}
	return byteStrings;
}

2. la fonction Uri.FromHex retourne la valeur décimale d'un caractère hexadécimal.
Utilisons-la donc pour nous retourner un byte pour une chaine de 2 caractères hexadecimaux:

 
Sélectionnez

public static byte ToByteFromHex(string byteString)
{
	byte byte1 = Convert.ToByte(Uri.FromHex(byteString[0]));
	byte byte2 = Convert.ToByte(Uri.FromHex(byteString[1]));
	return Convert.ToByte((byte1 * 16) + byte2);
}

3. Il nous reste à present à implementer la fonction qui nous retournera un tableau de byte quelquesoit la longueur de la chaine hexadecimale

 
Sélectionnez

public static byte[] BytesFromHex(string hexString)
{
	byte[] bytes = null;
	int max = hexString.Length;
	if (max > 0)
	{
		if (max == 1)
		{
			bytes = new byte[]{ToByteFromHex("0" + hexString)};
		}
		else
		{
			int index = 0;
			string[] byteStrings = ToEvenByteStrings(hexString);
			bytes = new byte[byteStrings.Length - 1];
			foreach (string byteString in byteStrings)
			{
				bytes(index) = ToByteFromHex(byteString);
				index += 1;
			}
		}
	}
	return bytes;
}

Lors de l'utilisation de BytesFromHex, il faudra juste veiller à la possibilité d'un retour de valeur null en cas de chaine vide passée en paramètre.

Créé le 1er février 2006  par neguib

Lien : Méthode Uri.FromHex

La solution est de créer une instance du type désiré. Pour savoir le type réel de l'objet, la méthode GetType() est de grande utilité. Ensuite, on charge l'Assembly "Forms" pour enfin modifier le Type de l'instance.

 
Sélectionnez

static public Control ObjectToControl(object obj)
{
	string typeName = obj.GetType().ToString();
	Assembly a = Assembly.GetAssembly(typeof(Form));
	Type t = a.GetType(typeName);
	Control c = (Control)Activator.CreateInstance(t);
	c = (Control)Convert.ChangeType(obj, t);

	return c;
}
Créé le 1er février 2006  par Didier Danse

Voici quelques fonctions static qui vous permettront de convertir tout numerique entier en son equivalent chaine de caractères hexadécimaux, simplement en utilisant une surcharge de ToString() et le format X.

Transformation effective pour les types byte, UInt16, UInt32, UInt64

 
Sélectionnez

public static string ToHexString(byte byte)
{
	return byte.ToString("X2", null);
}
public static string ToHexString(UInt16 uint16)
{
	return uint16.ToString("X4", null);
}
public static string ToHexString(UInt32 uint32)
{
	return uint32.ToString("X8", null);
}
public static string ToHexString(UInt64 uint64)
{
	return uint64.ToString("X16", null);
}

Il ne vous reste qu'à prevoir la conversion pour les types restant SByte, short, int, long :

 
Sélectionnez

public static string ToHexString(SByte sbyte)
{
	return ToHexString(Convert.ToByte(sbyte));
}
public static string ToHexString(short int16)
{
	return ToHexString(Convert.ToUInt16(int16));
}
public static string ToHexString(int int32)
{
	return ToHexString(Convert.ToUInt32(int32));
}
public static string ToHexString(long int64)
{
	return ToHexString(Convert.ToUInt64(int64));
}
Créé le 1er février 2006  par neguib

Lien : Tableau des formats des résultats numériques

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2007 Dotnet Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.