【问题标题】:BitConverter.ToString() vs Convert.ToBase64String()BitConverter.ToString() 与 Convert.ToBase64String()
【发布时间】:2010-02-25 21:26:46
【问题描述】:

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

更具体地说,什么时候应该使用一个而不是另一个?


例如,在this question 关于创建 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("-", "");
}

【问题讨论】:

  • base 16 (hex) vs base 64!显然 base 64 转换后的字符串会更小。

标签: c# .net


【解决方案1】:

BitConverter.ToString 不进行 Base64 编码,它转换为带连字符的十六进制(Base 16,每个字节之间有破折号)。

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

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

【讨论】:

    【解决方案2】:

    来自 MSDN 的 Convert.ToBase64String

    以升序排列的 base-64 数字 从零开始是大写字符 “A”到“Z”,小写字符 “a”到“z”,数字“0”到“9”, 以及符号“+”和“/”。这 无值字符“=”用于 尾随填充。

    wikipedia article on Base64 更能说明算法实际的工作原理。

    BitConverter 将每个字节的十六进制值作为两位数,并一个接一个地附加它们,用破折号分隔。

    两者都可以双向转换。

    为了便于阅读,BitConverter 随时都能胜过 Base64 字符串,但 Base64 字符串更紧凑。

    【讨论】:

      【解决方案3】:

      ToString method on BitConverter 将为您提供十六进制表示形式的字节数组(以 16 为基数)。

      ToBase64String method on the Convert class 会给你一个base 64-encoded string

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

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

      如果您担心可读性(例如,向程序员显示文件中的字节,或者要显示字节数据的显示),那么在@987654331 上使用ToString 方法更有意义@,因为大多数人习惯于以十六进制(base-16)格式查看字节数据。

      【讨论】:

        猜你喜欢
        • 2010-11-16
        • 2011-02-01
        • 1970-01-01
        • 2010-10-25
        • 2016-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多