BitConverter.ToString()vs Convert.ToBase64String()

Edd*_*die 21 .net c#

我原以为这Convert.ToBase64String()是用于创建字节数组的base64字符串的方法,但我最近遇到过BitConverter.ToString().两者有什么区别?

更具体地说,何时应该使用另一个?


例如,在关于创建MD5摘要的这个问题中,CraigS对答案的评论指出"ToBase64String不会返回我想要的内容.但是,字节数组周围的BitConverter.ToString可以解决问题."

BitConverter.ToString(
    MD5.Create().ComputeHash(Encoding.Default.GetBytes(StringToEncode))
).Replace("-", "")
Run Code Online (Sandbox Code Playgroud)

VS

Convert.ToBase64String(
    MD5.Create().ComputeHash(Encoding.Default.GetBytes(StringToEncode))
)
Run Code Online (Sandbox Code Playgroud)

另外,应该用什么来编码图像到base64?

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

VS

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

Dav*_*ton 13

来自MSDN Convert.ToBase64String:

从零开始的基数为64的数字是大写字母"A"到"Z",小写字母"a"到"z",数字"0"到"9",符号"+"和"/".无值字符"="用于尾随填充.

关于Base64维基百科文章对于算法实际如何工作更具启发性.

BitConverter需要每个字节的十六进制值作为两位数字,并将其附加接连用破折号分开一个.

两者都可以双向转换.

为了便于阅读,BitConverter任何一天都可以击败Base64字符串,但Base64字符串更紧凑.


Ran*_*pho 13

BitConverter.ToString 没有Base64编码,它转换为带连字符的十六进制(Base 16,每个字节之间有短划线).

最终,使用对您的特定用途有意义的那个.如果您在文本媒体(例如http)上发送比特,请使用Base64,因为您必须传输较少的整体数据.

如果您只是想向用户显示某些二进制数据的文本表示,您可以使用BitConverter.ToString().


cas*_*One 7

ToString方法上BitConverter是要给你在hexdecimal表示字节数组(底座16).

ToBase64String对方法Convert会给你一个基地64编码字符串.

它们都执行将字节数组转换为字符串表示的功能,然后可以将其反转(这不是单向转换).

如果您担心结果字符串的长度,通常最好使用该ToBase64String方法Convert.因为base-64可以在base中有一个字符表示更多的值(比base-16多4倍),所以它可以使用较少数量的字符表示大量数字.

如果您担心可读性(例如,将文件中的字节显示给程序员,或者将显示字节数据的显示器),则使用该ToString方法更有意义BitConverter,因为大多数人习惯于查看十六进制(base-16)格式的字节数据.