Можем ли мы преобразовать шестнадцатеричную строку в массив байтов, используя встроенную функцию в C#, или мне нужно сделать для этого специальный метод?Как преобразовать шестнадцатеричную строку в массив байтов?
ответ
Вот хороший пример LINQ fun.
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();
}
** Боже мой! ** Вы понимаете, как НЕФФИЦИЕНТ? Конечно, это весело, но LINQ слишком много используется для вещей, которые нужно сделать иначе! Для LINQ-кода требуется .NET 3.5 и требуется ссылка на System.Core (который в противном случае не нужен). См. Дублируемую статью для эффективных решений. – 2011-05-31 07:58:12
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;
}
Я сделал некоторые исследования и выяснили, что byte.Parse даже медленнее, чем Convert.ToByte. Самое быстрое преобразование, которое я мог бы использовать, использует приблизительно 15 тиков за байт.
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));
}
// также работает на платформе .NET Micro Framework, где (в SDK4.3) byte.Parse (строка) допускает только целые форматы.
Я думаю, что это может сработать.
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. Как преобразовать шестнадцатеричную строку в байт-массив?
- 2. Преобразовать массив байтов в шестнадцатеричную строку в простом старом C
- 3. Зачем преобразовывать массив байтов в шестнадцатеричную строку?
- 4. Как превратить шестнадцатеричную строку непосредственно в массив байтов?
- 5. Преобразовать массив байтов в строку байтов
- 6. Преобразовать строку в шестнадцатеричную
- 7. Как правильно преобразовать шестнадцатеричную строку в байт-массив в C?
- 8. Как преобразовать строку в шестнадцатеричную?
- 9. преобразовать строку в шестнадцатеричную строку
- 10. Как преобразовать шестнадцатеричную строку NSData в стандартную шестнадцатеричную строку?
- 11. Как преобразовать строку в массив байтов
- 12. Как преобразовать массив байтов в строку
- 13. Как преобразовать строку в массив байтов
- 14. Как эффективно преобразовать массив байтов в строку
- 15. Как преобразовать массив байтов в строку
- 16. Как преобразовать массив байтов в строку
- 17. Как преобразовать строку в массив байтов?
- 18. Как преобразовать массив байтов в строку?
- 19. Как преобразовать массив байтов в строку?
- 20. Как преобразовать массив байтов в строку?
- 21. Как преобразовать массив байтов в строку?
- 22. Как преобразовать массив байтов в строку?
- 23. Как преобразовать строку Java в массив байтов?
- 24. Как преобразовать массив байтов в шестую строку?
- 25. Как преобразовать массив байтов в строку кусками?
- 26. C++ Как преобразовать строку в массив байтов?
- 27. Как преобразовать строку UTF8 в массив байтов?
- 28. Как преобразовать текстовую строку в шестнадцатеричную строку?
- 29. C# bitconverter.ToString преобразовать в шестнадцатеричную строку
- 30. преобразовать шестнадцатеричную строку в NSData
Вы можете легко преобразовать строку в Byte [] в одной строке: Var = ByteArray, Encoding.ASCII.GetBytes (string_with_your_data); – 2013-06-06 22:02:05
@ mik-T, шестнадцатеричная строка находится в некотором формате, таком как 219098C10D7, который каждые два символа преобразует в один байт. ваш метод не используется. – AaA 2014-12-12 07:52:30
Этот вопрос, похоже, не дублирует выбранный вопрос. этот преобразует из шестнадцатеричной строки в массив байтов, однако другой вопрос преобразует массив байтов в шестнадцатеричный. – AaA 2014-12-12 07:53:25