Peut-on convertir une chaîne hexadécimale en un tableau d'octets en utilisant une fonction intégrée en C# ou dois-je faire une méthode personnalisée pour cela?Comment puis-je convertir une chaîne hexadécimale en un tableau d'octets?
Répondre
Voici un exemple sympa de LINQ.
public static byte[] StringToByteArray(string hex) {
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
** Bon Dieu !! ** Est-ce que vous vous rendez compte comment INEFFICIENT c'est ??? Bien sûr, c'est amusant, mais LINQ est surutilisé pour des choses qui devraient être faites autrement! Le code LINQ requiert .NET 3.5 et nécessite de référencer System.Core (qui pourrait autrement ne pas être nécessaire). Voir l'article en double pour des solutions efficaces. –
Il est probablement censé être amusant, pas efficace – Karsten
Cette réponse a au moins l'avantage d'être capable de compiler. keyAsBytes est indéfini dans l'autre. –
public static byte[] ConvertHexStringToByteArray(string hexString)
{
if (hexString.Length % 2 != 0)
{
throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, "The binary key cannot have an odd number of digits: {0}", hexString));
}
byte[] HexAsBytes = new byte[hexString.Length/2];
for (int index = 0; index < HexAsBytes.Length; index++)
{
string byteValue = hexString.Substring(index * 2, 2);
HexAsBytes[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
}
return HexAsBytes;
}
Ne devrait-il pas être "pour (int index = 0; index
je fait quelques recherches et trouvé que byte.Parse est encore plus lent que Convert.ToByte. La conversion la plus rapide que je pourrais trouver utilise environ 15 ticks par octet.
public static byte[] StringToByteArrayFastest(string hex) {
if (hex.Length % 2 == 1)
throw new Exception("The binary key cannot have an odd number of digits");
byte[] arr = new byte[hex.Length >> 1];
for (int i = 0; i <hex.Length>> 1; ++i)
{
arr[i] = (byte)((GetHexVal(hex[i << 1]) << 4) + (GetHexVal(hex[(i << 1) + 1])));
}
return arr;
}
public static int GetHexVal(char hex) {
int val = (int)hex;
//For uppercase A-F letters:
return val - (val < 58 ? 48 : 55);
//For lowercase a-f letters:
//return val - (val < 58 ? 48 : 87);
//Or the two combined, but a bit slower:
//return val - (val < 58 ? 48 : (val < 97 ? 55 : 87));
}
// fonctionne aussi sur .NET Micro Framework où (en SDK4.3) byte.Parse (chaîne) ne permet que des formats entiers.
Il serait préférable que la fonction GetHexVal soit inline à la place. –
J'ai essayé ça, mais d'une certaine manière c'est un peu plus rapide. Peut-être parce que la différence entre le tas et la pile. – CainKellye
Hmmm étrange. Eh bien, je l'ai testé avec VB.NET 2.0 (compilateur 2010) x86 en utilisant son opérateur ternaire if() et il était nettement plus rapide. Et en général, les opérateurs IL ne devraient-ils pas être plus rapides que les appels de fonction? –
Je pense que cela peut fonctionner.
public static byte[] StrToByteArray(string str)
{
Dictionary<string, byte> hexindex = new Dictionary<string, byte>();
for (int i = 0; i <= 255; i++)
hexindex.Add(i.ToString("X2"), (byte)i);
List<byte> hexres = new List<byte>();
for (int i = 0; i < str.Length; i += 2)
hexres.Add(hexindex[str.Substring(i, 2)]);
return hexres.ToArray();
}
- 1. En C#, Comment convertir une chaîne hexadécimale en int?
- 2. Quelle est la meilleure façon de convertir une chaîne hexadécimale en un tableau d'octets (.NET)?
- 3. Comment convertir un tableau d'octets en chaîne?
- 4. convertir la chaîne de caractères hexadécimale en entier en Java
- 5. Convertir une chaîne en tableau (android)
- 6. C (gcc sur linux): Comment convertir une chaîne hexadécimale "0xfffffff" en un entier?
- 7. Comment convertir une chaîne Ruby avec des parenthèses en tableau?
- 8. Conversion d'une chaîne hexadécimale en unicode
- 9. Conversion d'un nombre entier en une chaîne hexadécimale dans Ruby
- 10. Convertir une chaîne avec une représentation hexadécimale d'un double IEEE-754 en variable numérique JavaScript
- 11. Comment faire pour convertir UTF-16 chaîne hexadécimale en UTF-8 en PHP?
- 12. Convertir une chaîne en CLLocationCoordinate2D
- 13. Convertir chaîne de tableau PHP dans un tableau
- 14. Comment terminer un tableau de caractères avant de convertir en une chaîne en Java
- 15. Comment puis-je convertir en toute sécurité un tableau d'octets en une chaîne et revenir?
- 16. Comment convertir une chaîne en un tableau de chaînes contenant un caractère chacune
- 17. Convertir un nombre en chaîne binaire
- 18. Comment convertir une chaîne strings en chaîne en C++?
- 19. Comment convertir un contenu STDIN en tableau?
- 20. Comment convertir une chaîne en OctetString (C#)?
- 21. Convertir un tableau d'octets en un tableau court en C#
- 22. Comment convertir une chaîne de champs multi-utilisateur SharePoint en un tableau de SPUsers?
- 23. Python: conversion de chaîne binaire/hexadécimale?
- 24. Comment convertir une chaîne en CharSequence?
- 25. Comment convertir une chaîne en TimeSeriesDataItem
- 26. Comment convertir une variable en chaîne?
- 27. Convertir une chaîne en streaming
- 28. asp.net Convertir une chaîne CSV en chaîne []
- 29. Comment convertir un tableau ruby en tableau C avec RubyInline?
- 30. Convertir une chaîne en .net
Vous pouvez facilement convertir la chaîne à octet [] en une ligne: var = byteArray Encoding.ASCII.GetBytes (string_with_your_data); –
@ mik-T, une chaîne hexadécimale est dans un format comme 219098C10D7 qui tous les deux caractères convertit en un seul octet. votre méthode n'est pas utilisable. – AaA
Cette question ne semble pas être une copie de la question sélectionnée. celui-ci convertit FROM chaîne hexadécimale en tableau d'octets, cependant l'autre question convertit le tableau d'octets en hexadécimal. – AaA