байт [] для преобразовывания строки в шестнадцатеричную систему [дубликат]

Где заполнены переменные $ 1, $ 2 и $ 3?

Ваше регулярное выражение работает нормально, см. Этот код:

$temp = "toLocRobo_2019-01-30"
$regex = [regex]::Matches($temp, '([0-9]+)-([0-9]+)-([0-9]+)')
$regex.groups[0].value
$regex.groups[1].value
$regex.groups[2].value
$regex.groups[3].value
312
задан meagar 17 April 2017 в 16:13
поделиться

6 ответов

Существует созданный в методе для этого:

byte[] data = { 1, 2, 4, 8, 16, 32 };

string hex = BitConverter.ToString(data);

Результат: 01-02-04-08-10-20

, Если Вы хотите это без тире, просто удалите их:

string hex = BitConverter.ToString(data).Replace("-", string.Empty);

Результат: 010204081020

, Если Вы хотите более компактное представление, можно использовать Base64:

string base64 = Convert.ToBase64String(data);

Результат: AQIECBAg

563
ответ дан Levi Botelho 23 November 2019 в 01:10
поделиться

Поскольку другие сказали, что это зависит от кодирования значений в массиве байтов. Несмотря на это необходимо быть очень осторожными с этим видом вещи, или можно попытаться преобразовать байты, которые не обрабатываются выбранным кодированием.

Jon Skeet имеет хорошая статья о кодировании и unicode в.NET. Рекомендуемое чтение.

1
ответ дан Ash 23 November 2019 в 01:10
поделиться

Необходимо знать кодирование строки, представленной в байтах, но можно сказать System.Text.UTF8Encoding.GetString(bytes) или System.Text.ASCIIEncoding.GetString(bytes). (Я делаю это из памяти, таким образом, API не может быть точно корректным, но это очень близко.)

Для ответа на Ваш второй вопрос, см. этот вопрос .

2
ответ дан Community 23 November 2019 в 01:10
поделиться

Хорошо я не преобразовываю байты для преобразовывания в шестнадцатеричную систему часто, таким образом, я должен сказать, что не знаю, существует ли лучший путь тогда это, но здесь является способом сделать это.

StringBuilder sb = new StringBuilder();
foreach (byte b in myByteArray)
    sb.Append(b.ToString("X2"));

string hexString = sb.ToString();
20
ответ дан Quintin Robinson 23 November 2019 в 01:10
поделиться

Шестнадцатеричное число, Linq-fu:

string.Concat(ba.Select(b => b.ToString("X2")).ToArray())

ОБНОВЛЕНИЕ с временами

, Как отмечено @RubenBartelink, код, которые не имеют преобразования IEnumerable<string> к массиву: ba.Select(b => b.ToString("X2")) не работает до 4,0, тот же код теперь работает над 4,0.

Этот код...

byte[] ba = { 1, 2, 4, 8, 16, 32 };

string s = string.Concat(ba.Select(b => b.ToString("X2")));
string t = string.Concat(ba.Select(b => b.ToString("X2")).ToArray());

Console.WriteLine (s);
Console.WriteLine (t);

... до.NET 4.0, вывод:

System.Linq.Enumerable+<CreateSelectIterator>c__Iterator10`2[System.Byte,System.String]
010204081020

На.NET 4.0 вперед, строка. Concat имеет перегрузку, которая принимает IEnumerable. Следовательно на 4,0, вышеупомянутый код будет иметь тот же вывод для обеих переменных s, и t

010204081020
010204081020

До 4,0, ba.Select(b => b.ToString("X2")) идет для перегрузки (object arg0), путь к IEnumerable<string> для движения в надлежащую перегрузку, т.е. (params string[] values), мы должны преобразовать IEnumerable<string> в массив строк. До 4,0, строка. Concat имеет 10 функций перегрузки, на 4,0 это теперь 12

69
ответ дан Michael Buen 23 November 2019 в 01:10
поделиться

Вы комбинируете LINQ со строковыми методами:

string hex = string.Join("",
  bin.Select(
    bin => bin.ToString("X2")
      ).ToArray());
2
ответ дан 23 November 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: