Как преобразовать byte [] в строку, используя .NET, чтобы получить ту же строку, что и SQL Server Convert формата 1 или 2? - PullRequest
4 голосов
/ 29 октября 2011

Функция SQL Server convert () может преобразовать данные varbinary в строку с помощью этой кодировки:

Каждый двоичный символ преобразуется в два шестнадцатеричных символа. Если длина преобразованного выражения больше, чем data_type длина будет усечена.

Если тип_данных это тип символов фиксированного размера и длина преобразованный результат меньше его длины типа data_type; пробелы добавлено справа от преобразованного выражения для поддержания четности количество шестнадцатеричных цифр.

Символы 0x будут добавлены слева от преобразованного результата. для стиля 1.

Например, вывод может выглядеть как '0x389D7156C27AA70F15DD3105484A8461A2268284'. Как я могу легко сделать то же самое в C #? то есть преобразовать byte [] в строку, используя такую ​​же кодировку?

Ответы [ 2 ]

7 голосов
/ 29 октября 2011

Вы можете использовать BitConverter.ToString() и отбросить дефисы, используемые в качестве разделителя:

"0x" + BitConverter.ToString(bytes).Replace("-", "")

Или вы можете использовать LINQ и string.Concat(). Версия .Net 4:

"0x" + string.Concat(bytes.Select(b => b.ToString("X2")))

В .Net 3.5 необходимо добавить ToArray():

"0x" + string.Concat(bytes.Select(b => b.ToString("X2")).ToArray())

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

Обе эти версии в первую очередь предназначены для удобочитаемости и второй для производительности Если вам нужно, чтобы это было очень быстро, вы можете использовать StringBuilder и добавить отформатированные байты вручную.

0 голосов
/ 29 октября 2011

Использовать шестнадцатеричный формат в C #:

string Result;
foreach(byte b in data)
{
    Result += String.Format("{0:00X}", b);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...