Supposons que j'ai cette chaîne
string str = "1234"
J'ai besoin d'une fonction qui convertit cette chaîne en cette chaîne:
"0x31 0x32 0x33 0x34"
J'ai cherché en ligne et trouvé beaucoup de choses similaires, mais pas une réponse à cette question.
string str = "1234";
char[] charValues = str.ToCharArray();
string hexOutput="";
foreach (char _eachChar in charValues )
{
// Get the integral value of the character.
int value = Convert.ToInt32(_eachChar);
// Convert the decimal value to a hexadecimal value in string form.
hexOutput += String.Format("{0:X}", value);
// to make output as your eg
// hexOutput +=" "+ String.Format("{0:X}", value);
}
//here is the HEX hexOutput
//use hexOutput
Cela semble le travail pour une méthode d'extension
void Main()
{
string test = "ABCD1234";
string result = test.ToHex();
}
public static class StringExtensions
{
public static string ToHex(this string input)
{
StringBuilder sb = new StringBuilder();
foreach(char c in input)
sb.AppendFormat("0x{0:X2} ", (int)c);
return sb.ToString().Trim();
}
}
Quelques astuces.
N'utilisez pas la concaténation de chaînes. Les chaînes sont immuables et chaque fois que vous concaténez une chaîne, une nouvelle chaîne est créée. (Pression sur l'utilisation de la mémoire et la fragmentation) Un StringBuilder est généralement plus efficace dans ce cas.
Les chaînes sont un tableau de caractères et utiliser un foreach sur une chaîne donne déjà accès au tableau de caractères
Ces codes communs conviennent parfaitement à une méthode d’extension incluse dans une bibliothèque d’utilitaires toujours disponible pour vos projets (réutilisation de code).
static void Main(string[] args)
{
string str = "1234";
char[] array = str.ToCharArray();
string final = "";
foreach (var i in array)
{
string hex = String.Format("{0:X}", Convert.ToInt32(i));
final += hex.Insert(0, "0X") + " ";
}
final = final.TrimEnd();
Console.WriteLine(final);
}
La sortie sera;
0X31 0X32 0X33 0X34
Voici une DEMO
.
Convertir en tableau d'octets puis en hexadécimal
string data = "1234";
// Convert to byte array
byte[] retval = System.Text.Encoding.ASCII.GetBytes(data);
// Convert to hex and add "0x"
data = "0x" + BitConverter.ToString(retval).Replace("-", " 0x");
System.Diagnostics.Debug.WriteLine(data);
C’est celui que j’ai utilisé:
private static string ConvertToHex(byte[] bytes)
{
var builder = new StringBuilder();
var hexCharacters = new[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
for (var i = 0; i < bytes.Length; i++)
{
int firstValue = (bytes[i] >> 4) & 0x0F;
int secondValue = bytes[i] & 0x0F;
char firstCharacter = hexCharacters[firstValue];
char secondCharacter = hexCharacters[secondValue];
builder.Append("0x");
builder.Append(firstCharacter);
builder.Append(secondCharacter);
builder.Append(' ');
}
return builder.ToString().Trim(' ');
}
Et puis utilisé comme:
string test = "1234";
ConvertToHex(Encoding.UTF8.GetBytes(test));
[TestMethod]
public void ToHex()
{
string str = "1234A";
var result = str.Select(s => string.Format("0x{0:X2}", ((byte)s)));
foreach (var item in result)
{
Debug.WriteLine(item);
}
}