Qu'entendez-vous par "notation hexadécimale"? Cela fait généralement référence à l'encodage de données binaires, pas de texte. Vous devez coder le texte d'une manière ou d'une autre (par exemple en utilisant UTF-8), puis encoder les données binaires en tant que texte en convertissant chaque octet en une paire de caractères.
using System;
using System.Text;
public class Hex
{
static void Main()
{
string original = "The quick brown fox jumps over the lazy dog.";
byte[] binary = Encoding.UTF8.GetBytes(original);
string hex = BytesToHex(binary);
Console.WriteLine("Hex: {0}", hex);
byte[] backToBinary = HexToBytes(hex);
string restored = Encoding.UTF8.GetString(backToBinary);
Console.WriteLine("Restored: {0}", restored);
}
private static readonly char[] HexChars = "ABCDEF".ToCharArray();
public static string BytesToHex(byte[] data)
{
StringBuilder builder = new StringBuilder(data.Length*2);
foreach(byte b in data)
{
builder.Append(HexChars[b >> 4]);
builder.Append(HexChars[b & 0xf]);
}
return builder.ToString();
}
public static byte[] HexToBytes(string text)
{
if ((text.Length & 1) != 0)
{
throw new ArgumentException("Invalid hex: odd length");
}
byte[] ret = new byte[text.Length/2];
for (int i=0; i < text.Length; i += 2)
{
ret[i/2] = (byte)(ParseNybble(text[i]) << 4 | ParseNybble(text[i+1]));
}
return ret;
}
private static int ParseNybble(char c)
{
if (c >= '0' && c <= '9')
{
return c-'0';
}
if (c >= 'A' && c <= 'F')
{
return c-'A'+10;
}
if (c >= 'a' && c <= 'f')
{
return c-'A'+10;
}
throw new ArgumentOutOfRangeException("Invalid hex digit: " + c);
}
}
Non, cela ne le réduirait pas du tout. Au contraire, vous finiriez avec beaucoup plus de texte! Cependant, vous pouvez compresser le formulaire binaire. En termes de représentation de données binaires arbitraires en tant que texte, Base64 est plus efficace que hexadécimal. Utilisez Convert.ToBase64String et Convert.FromBase64String pour les conversions.
Parlez-vous de base64? J'allais poster une réponse, mais en relisant je ne suis pas sûr que vous sachiez ce que vous voulez dire. Pouvez-vous donner un exemple d'une chaîne que vous voulez convertir, puis un exemple de la même chaîne convertie? –
D'accord avec Adam - Je ne suis pas sûr que l'affiche sache ce qu'il veut. Si vous voulez transformer "Bonjour" en "48656C6C6F", c'est assez facile, mais je ne pense pas que ce soit tout à fait ça. – Coderer
Je devine l'attribution des devoirs. –