Base64的编码规则和C#实现
? ? Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一;
Base64的編碼規(guī)則
? ? Base64編碼的思想是是采用64個基本的ASCII碼字符對數(shù)據(jù)進(jìn)行重新編碼。
? ? 它將需要編碼的數(shù)據(jù)拆分成字節(jié)數(shù)組。以3個字節(jié)為一組。按順序排列24 位數(shù)據(jù),再把這24位數(shù)據(jù)分成4組,即每組6位。再在每組的的最高位前補(bǔ)兩個0湊足一個字節(jié)。這樣就把一個3字節(jié)為一組的數(shù)據(jù)重新編碼成了4個字節(jié)。
? ? 當(dāng)所要編碼的數(shù)據(jù)的字節(jié)數(shù)不是3的整倍數(shù),也就是說在分組時最后一組不夠3個字節(jié)。這時在最后一組填充1到2個0字節(jié)。并在最后編碼完成后在結(jié)尾添加1到2個 “=”。
BASE64字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
? ? 三個字節(jié)base64編碼后變?yōu)?個字節(jié);解碼又還原;下面來看一下;
private void button1_Click(object sender, EventArgs e){byte[] bytes = Encoding.Default.GetBytes("一系列");string str = Convert.ToBase64String(bytes);textBox1.Text = "一系列";textBox2.Text = str;//textBox3.Text = System.Text.Encoding.Default.GetString(bytes);string binary1="";for (int i = 0; i < bytes.Length; i++){binary1 = binary1 + Convert.ToString(bytes[i], 2) + Environment.NewLine;}textBox3.Text = binary1;byte[] bytes2 = Encoding.Default.GetBytes(str);string binary2 = "";for (int i = 0; i < bytes2.Length; i++){binary2 = binary2 + Convert.ToString(bytes2[i], 2) + Environment.NewLine;}textBox4.Text = binary2;}運(yùn)行情況如下圖;左邊兩個文本框是三個漢字和它的Base64編碼;右邊是它們對應(yīng)的字節(jié);
三個漢字是6字節(jié);編碼后變?yōu)?字節(jié);下圖編碼后的字節(jié)的有的行看上去少了些bit,這是顯示的原因,前面0省略了;
?也可以實(shí)現(xiàn)對圖片的base64編碼;
private string base64string = "";public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){System.IO.MemoryStream m = new System.IO.MemoryStream();System.Drawing.Bitmap bp = new System.Drawing.Bitmap(@"y:\gif1.gif");bp.Save(m, System.Drawing.Imaging.ImageFormat.Gif);byte[]b= m.GetBuffer();base64string=Convert.ToBase64String(b);textBox1.Text = base64string;}private void button2_Click(object sender, EventArgs e){byte[] bt = Convert.FromBase64String(base64string);System.IO.MemoryStream stream = new System.IO.MemoryStream(bt);Bitmap bitmap = new Bitmap(stream);pictureBox2.Image = bitmap;}運(yùn)行如下;點(diǎn)第一個按鈕把圖片編碼為base64;點(diǎn)第二個按鈕再從base64碼獲得原圖像;
?
總結(jié)
以上是生活随笔為你收集整理的Base64的编码规则和C#实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC++ 中MSDataGrid控件的使
- 下一篇: 超图桌面版GIS配准基本操作