Подтвердить что ты не робот

BitConverter.ToString() vs Convert.ToBase64String()

Я думал, что Convert.ToBase64String() - это метод, используемый для создания строки base64 массива байтов, но я недавно встретил BitConverter.ToString(). В чем разница между двумя?

И более конкретно, когда нужно использовать другой?


Например, в этот вопрос о создании дайджестора MD5, комментарий CraigS на Ответ: "ToBase64String не возвращает то, что я хочу. Однако BitConverter.ToString вокруг массива байтов делает трюк".

BitConverter.ToString(
    MD5.Create().ComputeHash(Encoding.Default.GetBytes(StringToEncode))
).Replace("-", "")

против

Convert.ToBase64String(
    MD5.Create().ComputeHash(Encoding.Default.GetBytes(StringToEncode))
)

Кроме того, что следует использовать для кодирования изображений на base64?

public string ImageToBase64(int Img_ID)
{
    byte[] tempBytes = showImageById(Img_ID); // get image from DB
    return Convert.ToBase64String(tempBytes);
}

против

public string ImageToBase64(int Img_ID)
{
    byte[] tempBytes = showImageById(Img_ID); // get image from DB
    return BitConverter.ToString(tempBytes).Replace("-", "");
}
4b9b3361

Ответ 1

Из MSDN для Convert.ToBase64String:

База-64 цифры в порядке возрастания от нуля - символы верхнего регистра "A" - "Z", символы нижнего регистра "a" - "z", цифры "0" - "9", и символы "+" и "/". бесполезный символ, "=", используется для задняя прокладка.

статья в википедии на Base64 гораздо более познает, как работает алгоритм.

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

Оба могут быть преобразованы в обоих направлениях.

Для удобства чтения BitConverter в любой день превосходит строку Base64, но строка Base64 более компактна.

Ответ 2

BitConverter.ToString не кодирует Base64, он преобразуется в переносимое шестнадцатеричное (Base 16 с тире между каждым байтом).

В конечном счете используйте тот, который имеет смысл для вашего конкретного использования. Если вы отправляете биты через текстовый носитель (например, http), используйте Base64, так как вам придется передавать меньше общих данных.

Если вы просто хотите отобразить текстовое представление некоторых двоичных данных для пользователя, вы можете использовать BitConverter.ToString().

Ответ 3

Метод ToString в BitConverter даст вам массив байтов в шестнадцатеричном представлении (база 16).

Метод ToBase64String в классе Convert даст вам базовая 64-кодированная строка.

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

Обычно лучше использовать метод ToBase64String на Convert, если у вас есть сомнения относительно длины результирующей строки. Поскольку base-64 может иметь символ в базе, это означает большее число значений (в 4 раза больше, чем base-16), оно может представлять большое число с использованием меньшего количества символов.

Если вас беспокоит читаемость (например, отображение байтов в файле программисту или отображение, на котором будут отображаться данные байта), тогда имеет смысл использовать метод ToString на BitConverter, так как большинство людей привыкли смотреть данные байта в формате hexidecimal (base-16).