ToBase64String方法的学习

网上溜达时,看见的好帖,转一下。

ToBase64String方法

流与字符串的转换的帖子中[http://www.rgcenter.cn:8081/bbs/viewthread.php?tid=99&page=1&extra=page%3D1],我们看到了用ToBase64String方法可以在不丢失数据的情况下将字节数组转成字符串,那么ToBase64String是怎样做到的呢?


经过我一晚的奋战,终于将ToBase64String在转换时用到的编码方法推出来了,并得到了最终的验证。在ToBase64String方法中,会对字节数组中的连续三字节进行一次编码,编码得的字符串长度为4位,而且得出来的4位的字符串里面的字符肯定是由大小写字母、数字(0~9)、+、/组成,例如有一个字节数组{212,36,25,23,45,65},ToBase64String方法会将这个数组分成2个数组,分别为{212,36,25}和{23,45,65},{212,36,25}计算出来的字符串是“1CQZ”,而{23,45,65} 是“Fy1B”,如果是{212,36,25,23},则先分成两个数组,{212,36,25}和{23},{212,36,25}已经计算过了,但{23}不足三字节,怎么办?{23}会转换成“Fw==”,所以{212,36,25}和{23,45,65},{212,36,25}转换出来的字符串是“1CQZFy1B”,{212,36,25,23}是“1CQZFw==”。为什么会这样转换呢?


在ToBase64String中,利用了52个大小写字母,10个数字,“+”和“/”一共64个字符组成三个不同的矩阵,因为这三个矩阵比较大,不好放出来,所以你可以在附件中看到这在个矩阵的情况。当一个数组中只由1个字节组成时,在ToBase64String方法中只会用到第一个矩阵,当由2个字节组成时,在ToBase64String方法中会用到第一和第二个矩阵,当由3个字节组成时, ToBase64String方法中就会用全1、2、3这三个矩阵。


而在这三个矩阵中,是一阵扣一阵。例如要用到第三个矩阵,就要求从第一个矩阵计算出第二个矩阵的起码编码,根据字节的大小计算第二矩阵经过偏移量得出的编码,再由每二矩阵编码找到第三矩阵的偏移编码,找到第三矩阵编码后,最后由第一矩阵的纵码+第二矩阵纵码+第三矩阵纵码+第三矩阵横码=最后的转换字符串。(哈哈~是不是好复杂~不复杂的,只是看到矩阵有点晕~)。


至于推出了上面的方法后对我们有没有实质性的意义,这个我现在考虑不到,因为是一时兴起搞的。


搞了一晚还要上课,辛苦吖~~老师~多加点分吖~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Base64编码是一种将二进制数据转换为ASCII字符的编码方式,它将原始数据按照固定的规则转换成一串字符。由于Base64编码使用了64个字符来表示64个不同的值,因此编码后的数据大小会比原始数据稍微大一些。 具体到图片的情况,使用Base64编码将图片转换成字符串后,其大小会比原始图片的大小大约增加1/3左右。这是因为Base64编码后的字符串中会包含一些额外的字符,用来表示原始数据的编码格式。 需要注意的是,大图片转换成Base64编码后的字符串会非常长,可能会导致数据传输的效率降低。因此,在实际应用中,如果需要传输大图片,建议直接传输图片的URL或者使用其他方式进行传输,而不是将图片转换成Base64编码字符串传输。 参考资料: 之前一直有用过对图片进行base64编码,然后将base64编码后的串放在请求体中传输,由于http本身并没有对请求体的大小进行限制,因此也并未对图片的大小以及编码后的base64串大小进行过研究。因为目前我们的技术架构方面,前端直接访问网关层,由于网关层对body体进行了大小限制,因此我需要了解图片和base64编码之间的大小关系。 :https://c.runoob.com/front-end/59这个工具蛮好用的,大图片就用它转base64。 :主要介绍了基于JavaScript获取base64图片大小,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下。 :当把byte[]通过Convert.ToBase64String转换成Base64编码字符串时数据会明显变大,是为什么呢?我们就先探究一下什么是Base64编码?<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值