Byte[]和BASE64之间的转换
编码
把byte[]中的元素当做⽆符号⼋位整数转换成只含有64个基本字符的字符串,这些基本字符是:
l⼤写的A-Z
l⼩写的a-z
l数字0-9
l'+' 和 '/'
这64个字符构成BASE64的字符集。‘=’,为填充字符,结尾处可以填充0-2个填充字符
Base64是将原⽂按照每 3 个字节⼀组分开,这个 3 字节组中的每⼀组将被按照位分解成 4 个部分,每个部分 6 个位,在这 4 个部分的每个部分⾼位加上 2 个 0构成⼀个新的 4 字节组,新的字节组中,每个字节只有 6 位,能表⽰64个值。
在原⽂在转换为BASE64编码时,试是以3个字节为⼀组转换成4字节⼀组的BASE64编码。如果原⽂不是
三字节的倍数,可能多出⼀个字节和两个字节,分别会被转为2字节和3字节的BASE64编码,这时编码系统应该在形成的BASE64编码最后添加上填充符”=”,保证BASE64编码长度是4的倍数。所以在BASE64编码后添加的填充符”=”可能为0-2个。
BASE64编码对照表如下:
Value Encoding Value Encoding Value Encoding Value Encoding
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/
Byte[]和BASE64之间的转换纯粹就是表现形式的⼀种转换,它们之间有直接的对应关系,不涉及到使⽤何种代码页的问题,BASE64表达的也是字节流。
实际应⽤中,dotnet提供的两个主要的BASE64⽅法Convert.ToBase64String 和 Convert.FromBase64String,并不是把Byte[]直接转成相应的BASE64的字节流,⽽是转换成unicode的等价字符串,就是base64的值对应的字符在unicode的等价字符。
如果要把BASE64的等价字符串转成Byte[],还是需要指定⼀个代码页然后按照指定的编码转成Byte[]。
⼆、Byte[]和BASE64之间的转换操作
static void Main(string[] args)
{
string factString = "中华⼈民共和国";
byte[] myByte;
字符串数组怎么转成bytestring Base64Str;
//先把字符串按照utf-8的编码转换成byte[]
Encoding myEncoding = Encoding.GetEncoding("utf-8");
//myByte中获得这样的字节数组:228,184,173,229,141,142,228,186,186,230,176,145,229,133,177,229,146,140,229,155,189
myByte = myEncoding.GetBytes(factString);
//把byte[]转成base64编码,这个例⼦形成的base64编码的unicode等价字符串为:"5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9"
Base64Str = Convert.ToBase64String(myByte);
//再从base64编码转成byte[],⼜恢复为字节数组:228,184,173,229,141,142,228,186,186,230,176,145,229,133,177,229,146,140,229,155,189
myByte = Convert.FromBase64String(Base64Str);
//⽤同⼀个Encoding对象把byte[]转成字符串:"中华⼈民共和国"
factString = myEncoding.GetString(myByte);
Console.WriteLine(factString);
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。