php把图片转换成base64二级制流

php把图片转换成base64二级制流

读取图片文件,转换成base64编码格式

header('Content-type:text/html;charset=utf-8');

//读取图片文件,转换成base64编码格式

$image_file = '8.jpg';

$image_info = getimagesize($image_file);

$base64_image_content = "data:{$image_info['mime']};base64," .

chunk_split(base64_encode(file_get_contents($image_file)));

$base64_image_content='';

//保存base64字符串为图片

//匹配出图片的格式

if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)) {

$type = $result[2];

$new_file = "./test2001.{$type}";

if(file_put_contents($new_file, base64_decode(str_replace($result[1], '',

$base64_image_content)))){

echo '新文件保存成功:', $new_file;

}

}

echo '';

exit;

java中图片与base64位编码互转

JAVA CODE import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class Test64Bit { public static void main(String[] args) { // 测试从Base64编码转换为图片文件 String strImg = "这里放64位编码"; GenerateImage(strImg, "D:\wangyc.jpg"); // 测试从图片文件转换为Base64编码 System.out.println(GetImageStr("d:\wangyc.jpg")); } public static String GetImageStr(String imgFilePath) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理 byte[] data = null; // 读取图片字节数组

try { InputStream in = new FileInputStream(imgFilePath); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } // 对字节数组Base64编码 BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(data);// 返回Base64编码过的字节数组字符串 } public static boolean GenerateImage(String imgStr, String imgFi lePath) {// 对字节数组字符串进行Base64解码并生成图片 if (imgStr == null) // 图像数据为空 return false; BASE64Decoder decoder = new BASE64Decoder(); try { // Base64解码 byte[] bytes = decoder.decodeBuffer(imgStr); for (int i = 0; i < bytes.length; ++i) { if (bytes[i] < 0) {// 调整异常数据 bytes[i] += 256; } }

Base64编解码

Base64编解码 一、编码原理 Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。编码后的数据比原来的数据略长,是原来的4/3倍。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同(Base64de 编码表如下所示)。Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email,email via MIME, 在XML中存储复杂数据. Base64编码表

二、编码流程 步骤1:将要编码的所有字符都转化成对应的ASCII码。 步骤2:将所有的ASCII码转换成对应的8位长的二进制数。 步骤3:将所得的二进制数从高位到低位开始分成6位一组,最后一组不足六的则补充0 步骤4:将每组二进制数转换成十进制数,然后对照base64的编码表查找得到相应的编码。 注意:1、要求被编码字符是8bit的,所以须在ASCII编码范围内,\u0000-\u00ff,中文就不行。 2、如果被编码的字符串中字符的个数为3的倍数,按照上面的步骤即可得到正确的base64编码。但是如果不是3的倍数则要分情况讨论。如果是3的倍数余1,则要在编好的码字后面加上两个“=”,如果是3的倍数余2,这要在编好的码字后面加上一个“=”。(例如w的base64编码为dw==,w1的base64编码为dzE=) 下面我们来对具体的字符串进行编码举例,以便更好的理解编码流程: 编码「Man」 在此例中,Base64算法将三个字符编码为4个字符 特殊情况

VB Base64编码与解码函数

VB Base64编码与解码函数 ' Module1.bas Option Explicit Private Const cstBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" Private arrBase64() As String Public Function Base64Encode(strSource As String) As String'编码 On Error Resume Next If UBound(arrBase64) = -1 Then arrBase64 = Split(StrConv(cstBase64, vbUnicode), vbNullChar) End If Dim arrB() As Byte, bTmp(2) As Byte, bT As Byte Dim I As Long, J As Long arrB = StrConv(strSource, vbFromUnicode) J = UBound(arrB) For I = 0 To J Step 3 Erase bTmp bTmp(0) = arrB(I + 0) bTmp(1) = arrB(I + 1) bTmp(2) = arrB(I + 2) bT = (bTmp(0) And 252) / 4 Base64Encode = Base64Encode & arrBase64(bT) bT = (bTmp(0) And 3) * 16 bT = bT + bTmp(1) \ 16 Base64Encode = Base64Encode & arrBase64(bT) bT = (bTmp(1) And 15) * 4 bT = bT + bTmp(2) \ 64 If I + 1 <= J Then Base64Encode = Base64Encode & arrBase64(bT) Else Base64Encode = Base64Encode & "=" End If bT = bTmp(2) And 63 If I + 2 <= J Then Base64Encode = Base64Encode & arrBase64(bT) Else

BASE64编码规则

(一)、BA SE64编码规则及JAVA中的使用 1、编码规则: Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 例如字符串“张3” : 11010101 11000101 00110011 转换后: 00110101 00011100 00010100 00110011 用十进制表示即为:53 34 20 51 这个并不是最终的结果,还需要根据Base64的编码表查询出转换后的值。下面就是BASE64编码表: Table 1: The Base64 Alphabet Value Encoding Value Encoding Value Encoding Value Encoding 0 A 17 R 34 i 51 z 1 B 18 S 35 j 5 2 0 2 C 19 T 36 k 5 3 1 3 D 20 U 37 l 5 4 2 4 E 21 V 38 m 5 5 3 5 F 22 W 39 n 5 6 4 6 G 23 X 40 o 5 7 5 7 H 24 Y 41 p 58 6 8 I 25 Z 42 q 59 7 9 J 26 a 43 r 60 8 10 K 27 b 44 s 61 9 11 L 28 c 45 t 62 + 12 M 29 d 46 u 63 / 13 N 30 e 47 v (pad) = 14 O 31 f 48 w 15 P 32 g 49 x 16 Q 33 h 50 y 以上一共是64个编码,这也是Base64名称的由来,编码的编号对应的是得出的新字节的十进制值。因此,上例中字符串“张3”经过编码后就成了字符串“1iUz”了。 当代码量不是3的整数倍时,代码量/3的余数自然就是2或者1。转换的时候,结果不够6位的用0来补上相应的位置,之后再在6位的前面补两个0。转换完空出的结果就用就用“=”来补位。譬如结果若最后余下的为2个字节的“张”: 字符串“张” 11010101 HEX:D5 11000101 HEX:C5 00110101 00011100 00010100 十进制53 十进制34 十进制20 pad 字符’1’ 字符’i’ 字符’U’ 字符’=’

Base64编码及其作用

Base64编码的作用:由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII 字符的数据转换成ASCII字符的一种方法。它使用下面表中所使用的字符与编码。 而且base64特别适合在http,mime协议下快速传输数据。 base64其实不是安全领域下的加密解密算法。虽然有时候经常看到所谓的base64加密解密。其实base64只能算是一个编码算法,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是这种方式很初级,很简单。 Base64编码方法要求把每三个8Bit的字节转换为四个6Bit的字节,其中,转换之后的这四个字节中每6个有效bit为是有效数据,空余的那两个bit用0补上成为一个字节。因此Base64所造成数据冗余不是很严重,Base64是当今比较流行的编码方法,因为它编起来速度快而且简单 举个例子,有三个字节的原始数据:aaaaaabb bbbbccccc ccdddddd(这里每个字母表示一个bit位) 那么编码之后会变成:00aaaaaa00bbbbbb00cccccc 00dddddd 所以可以看出base64编码简单,虽然编码后不是明文,看不出原文,但是解码也很简单 一、编码规则 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24 位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。这时在最后一组填充1到2个0字节。并在最后编码完成后在结尾添加1到2个“=”。 例:将对ABC进行BASE64编码: 1、首先取ABC对应的ASCII码值。A(65)B(66)C(67); 2、再取二进制值A(01000001)B(01000010)C(01000011); 3、然后把这三个字节的二进制码接起来(010000010100001001000011); 4、再以6位为单位分成4个数据块,并在最高位填充两个0后形成4个字节的编码后的值,(00010000)(00010100)(00001001)(00000011),其中蓝色部分为真实数据; 5、再把这四个字节数据转化成10进制数得(16)(20)(9)(3); 6、最后根据BASE64给出的64个基本字符表,查出对应的ASCII码字符(Q)(U)(J)(D),这里的值实际就是数据在字符表中的索引。 注:BASE64字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

Base64的编解码方法

Base64是一种很常用的编码方式,利用它可以将任何二进制的字符编码到可打印的64个字符之中,这样,不管是图片,中文文本等都可以编码成只有ASCII的纯文本。至于为什么要进行这个转换呢,最初主要使用在EMail领域,早期的一些邮件网关只识别ASCII,如果发现邮件里有其他字符,就会将它们过滤掉,这样中文的邮件,有图片附件的邮件在这些网关上就会发生问题,于是将中文和图片都使用base64编码然后传输,接受后再解码就客服了这个问题了。Base64除了可以使用在相似场合,还可以用作简单的加密等等。下面介绍下Base64的方法: 首先是Base64中可能出现的所有字符: 0 A 17 R 34 i 51 z 1 B 18 S 35 j 5 2 0 2 C 19 T 36 k 5 3 1 3 D 20 U 37 l 5 4 2 4 E 21 V 38 m 5 5 3 5 F 22 W 39 n 5 6 4 6 G 23 X 40 o 5 7 5 7 H 24 Y 41 p 58 6 8 I 25 Z 42 q 59 7 9 J 26 a 43 r 60 8 10 K 27 b 44 s 61 9 11 L 28 c 45 t 62 + 12 M 29 d 46 u 63 / 13 N 30 e 47 v 14 O 31 f 48 w (pad) = 15 P 32 g 49 x 16 Q 33 h 50 y 所有的字符就是'A'~'Z','a'~'z','0'~'9','+','/'共64个,以及末尾的填充字符'=' 编码的方法是: 从输入缓冲中依次取出字符,第一个字符的,从最高位开始取出6个bit,这6个bit的值的范围在0~63,将这个值作为索引,对应上面的表格,找到相应的字符,这便是第一个Base64后的字符,然后将第一个字符的低2位与第二个字符的高4位组成6个bit, 同样查表得到第二个Base64字符,以此类推,从左向右没凑足6个bit就转换成一个Base64字符,由于输入缓冲中每3个字符包含24个bit,这24个bit正好可以转成4个Base64字符,所以没3个字符能组成一个转换循环,如果输入缓冲中字符的个数是3 的整数倍,那么结果就是4的整数倍,两者的长度是3:4的关系,但是如果输入字符不是3的整数倍呢?这就涉及到了末尾填充问题。 输入缓冲的末尾可能余下一个字符,或两个字符: 如果余下一个字符,前6个bit转换成Base64,剩下的低2位要右边补0 ,凑成6bit,然后转

base64

base64 在URL中的应用 VB版的Base64编码函数定义 JS版的Base64编码函数定义 C#实现BASE64加密、解密算法 Base64-MIME 在URL中的应用 VB版的Base64编码函数定义 JS版的Base64编码函数定义 C#实现BASE64加密、解密算法 Base64-MIME Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。 Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persi stence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为1 28-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。 然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。 为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“*”和“-”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。 另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。 此外还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。 Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。 关于这个编码的规则: ①.把3个字符变成4个字符.. ②每76个字符加一个换行符..

Base64编码原理教学文案

B a s e64编码原理

一. Base64编码由来 为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就不能通过邮件传送。这样用途就受到了很大的限制,比如图片二进制流的每个字节不可能全部是可见字符,所以就传送不了。最好的方法就是在不改变传统协议的情况下,做一种扩展方案来支持二进制文件的传送。把不可打印的字符也能用可打印字符来表示,问题就解决了。Base64编码应运而生,Base64就是一种基于64个可打印字符来表示二进制数据的表示方法。 二. Base64编码原理 看一下Base64的索引表,字符选用了"A-Z、a-z、0-9、+、/" 64个可打印字符。数值代表字符的索引,这个是标准Base64协议规定的,不能更改。64个字符用6个bit位就可以全部表示,一个字节有8个bit位,剩下两个bit就浪费掉了,这样就不得不牺牲一部分空间了。这里需要弄明白的就是一个Base64字符是8个bit,但是有效部分只有右边的6个bit,左边两个永远是0。

那么怎么用6个有效bit来表示传统字符的8个bit呢?8和6的最小公倍数是2 4,也就是说3个传统字节可以由4个Base64字符来表示,保证有效位数是一样的,这样就多了1/3的字节数来弥补Base64只有6个有效bit的不足。你也可以说用两个B ase64字符也能表示一个传统字符,但是采用最小公倍数的方案其实是最减少浪费的。结合下边的图比较容易理解。Man是三个字符,一共24个有效bit,只好用4个Base6 4字符来凑齐24个有效位。红框表示的是对应的Base64,6个有效位转化成相应的索引值再对应Base64字符表,查出"Man"对应的Base64字符是"TWFU"。说到这里有个原则不知道你发现了没有,要转换成Base64的最小单位就是三个字节,对一个字符串来说每次都是三个字节三个字节的转换,对应的是Base64的四个字节。这个搞清楚了其实就差不多了。

Microsoft Word - Base64编码原理doc - CHINAUNIX

Base64编码原理 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。 这样说会不会太抽象了?不怕,我们来看一个例子: 转换前 aaaaaabb ccccdddd eeffffff 转换后 00aaaaaa 00bbcccc 00ddddee 00ffffff 应该很清楚了吧?上面的三个字节是原文,下面的四个字节是转换后的Base64编码,其前两位均为0。转换后,我们用一个码表来得到我们想要的字符串(也就是最终的Base64编码),这个表是这样的:(摘自RFC2045) Table 1: The Base64 Alphabet Value Encoding Value Encoding Value Encoding Value Encoding 0 A 17 R 34 i 51 z 1 B 18 S 35 j 5 2 0 2 C 19 T 36 k 5 3 1 3 D 20 U 37 l 5 4 2 4 E 21 V 38 m 5 5 3 5 F 22 W 39 n 5 6 4 6 G 23 X 40 o 5 7 5 7 H 24 Y 41 p 58 6 8 I 25 Z 42 q 59 7 9 J 26 a 43 r 60 8 10 K 27 b 44 s 61 9 11 L 28 c 45 t 62 + 12 M 29 d 46 u 63 / 13 N 30 e 47 v 14 O 31 f 48 w (pad) = 15 P 32 g 49 x 16 Q 33 h 50 y 让我们再来看一个实际的例子,加深印象! 转换前 10101101 10111010 01110110 转换后 00101011 00011011 00101001 00110110 十进制 43 27 41 54 对应码表中的值 r b p 2 所以上面的24位编码,编码后的Base64值为 rbp2 解码同理,把 rbq2 的二进制位连接上再重组得到三个8位值,得出原码。 (解码只是编码的逆过程,在此我就不多说了,另外有关MIME的RFC还是有很多的,如果需要详细情况请自行查找。) 用更接近于编程的思维来说,编码的过程是这样的: 第一个字符通过右移2位获得第一个目标字符的Base64表位置,根据这个数值取到表上相应的字符,就是第一个目标字符。 然后将第一个字符左移4位加上第二个字符右移4位,即获得第二个目标字符。 再将第二个字符左移2位加上第三个字符右移6位,获得第三个目标字符。 最后取第三个字符的右6位即获得第四个目标字符。

base64编码

RFC 3548 - The Base16, Base32, and Base64 Data Encodings RFC 3548 - The Base16, Base32, and Base64 Data Encodings Search the RFC Archives Or Display the document by number

[ RFC Index | Usenet FAQs | Web FAQs | Documents | Cities | Copyrights | Neighborhoods ] Network Working Group S. Josefsson, Ed. Request for Comments: 3548 July 2003 Category: Informational The Base16, Base32, and Base64 Data Encodings Status of this Memo This memo provides information for the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited. Copyright Notice Copyright (C) The Internet Society (2003). All Rights Reserved. Abstract This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, and use of different encoding alphabets. Table of Contents

delphi版本的Base64解码编码源代码

delphi版本的Base64解码编码源代码 Unit CnBase64; Interface Uses SysUtils, Windows; Function Base64Encode(InputData: String; Var OutputData: String): byte; {* 对数据进行BASE64编码,如编码成功返回Base64_OK |InputData:string - 要编码的数据 var OutputData: string - 编码后的数据 | } Function Base64Decode(InputData: String; Var OutputData: String): byte; {* 对数据进行BASE64解码,如解码成功返回Base64_OK | InputData:string - 要解码的数据 var OutputData: string - 解码后的数据 | } Const BASE64_OK = 0; // 转换成功 BASE64_ERROR = 1; // 转换错误(未知错误)(e.g. can't encode octet in input stream) -> error in implementation BASE64_INV ALID = 2; // 输入的字符串中有非法字符(在FilterDecodeInput=False 时可能出现) BASE64_LENGTH = 3; // 数据长度非法 BASE64_DATALEFT = 4; // too much input data left (receveived 'end of encoded data' but not end of input string) BASE64_PADDING = 5; // 输入的数据未能以正确的填充字符结束Implementation Var FilterDecodeInput: Boolean = true; Const Base64TableLength = 64; Base64Table : String[Base64TableLength] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+*'; Pad = '='; Function Base64Encode(InputData: String; Var OutputData: String): byte; Var

Base64加密原理

Base64 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一。 Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit 再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。 我们来看一个例子: 转换前aaaaaabb ccccdddd eeffffff (a,b,c,d,e,f代表0/1) 转换后00aaaaaa 00bbcccc 00ddddee 00ffffff 上面的三个字节是原文,下面的四个字节是转换后的Base64编码,其前两位均为0。 转换后,我们用一个码表来得到我们想要的字符串(也就是最终的Base64编码),这个表是这样的:(摘自RFC2045) Table 1: The Base64 Alphabet V alue Encoding V alue Encoding V alue Encoding V alue Encoding 0 A17 R 34 i 51 z 1 B 18 S 35 j 5 2 0 2 C 19 T 36 k 5 3 1 3 D 20 U 37 l 5 4 2 4 E 21 V 38 m 5 5 3 5 F 22 W 39 n 5 6 4 6 G 23 X 40 o 5 7 5 7 H 24 Y41 p 58 6 8 I 25 Z 42 q 59 7 9 J 26 a 43 r 60 8 10 K 27 b 44 s 61 9 11 L 28 c 45 t 62 + 12 M 29 d 46 u 63 / 13 N 30 e 47 v 14 O 31 f 48 w (pad) = 15 P32 g 49 x 16 Q 33 h 50 y 让我们再来看一个实际的例子,加深印象! 转换前10101101 10111010 01110110 转换后00101011 00011011 00101001 00110110 十进制43 27 41 54 对应码表中的值r b p 2 所以上面的24位编码,编码后的Base64值为rbp2

Android 标准的Base64编码和解码

Android 标准的Base64编码和解码 2011-09-26 03:39 import java.io.IOException; public class Base64 { /** prevents anyone from instantiating this class */ private Base64() { } /** * This character array provides the alphabet map from RFC1521. */ private final static char ALPHABET[] = { // 0 1 2 3 4 5 6 7 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 0 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 1 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 2 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', // 3 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', // 4 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', // 5 'w', 'x', 'y', 'z', '0', '1', '2', '3', // 6 '4', '5', '6', '7', '8', '9', '+', '/' // 7 }; /** * Decodes a 7 bit Base64 character into its binary value. */ private static int valueDecoding[] = new int[128]; /** * initializes the value decoding array from the * character map */ static { for (int i = 0; i < valueDecoding.length; i++) { valueDecoding[i] = -1; } for (int i = 0; i < ALPHABET.length; i++) { valueDecoding[ALPHABET[i]] = i; } }

Base64实现转换原理

Base64编码,是我们程序开发中经常使用到的编码方法。它是一种基于用64个可打印字符来表示二进制数据的表示方法。它通常用作存储、传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用作电子邮件标准)中一种可打印字符表示二进制数据的常见编码方法!它其实只是定义用可打印字符传输内容一种方法,并不会产生新的字符集!有时候,我们学习转换的思路后,我们其实也可以结合自己的实际需要,构造一些自己接口定义编码方式。好了,我们一起看看,它的转换思路吧! Base64实现转换原理 它是用64个可打印字符表示二进制所有数据方法。由于2的6次方等于64,所以可以用每6个位元为一个单元,对应某个可打印字符。我们知道三个字节有24个位元,就可以刚好对应于4个Base64单元,即3个字节需要用4个Base64的可打印字符来表示。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中一般有所不同。但是,我们经常所说的Base64另外2个字符是:“+/”。这64个字符,所对应表如下。

转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。 如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。 编码后的数据比原始数据略长,为原来的4/3。无论什么样的字符都会全部被编码,因此不像Quoted-printable编码,还保留部分可打印 M的Ascii码是77,前六位对应值为19,对应base64字符是T,如此类推。其它字符编码就可以自动转换得到!我们看看另外不是刚好是3个字节的情况!

将一个字符串转换成Unicode类型的Base64编码的字符串

一、将一个字符串转换成Unicode类型的Base64编码的字符串如下: Convert.ToBase64String(Encoding.Unicode.GetBytes(unicodeString)); 红色标明的是还可以转换BigEndianUnicode(UTF-16),UTF-7,UTF-8,ASCII的几种编码. 那如何转换回来呢? Encoding.Unicode.GetString(Convert.FromBase64String(转换后的字符串)); 红色标明的是还可以将BigEndianUnicode(UTF-16),UTF-7,UTF-8,ASCII的几种编码转换回来. 二、C#中的String编码转换 必须引用System.Text命名空间 将gb2312 转换big5 编码 代码如下: private void button1_Click(object sender, System.EventArgs e) { byte[] temp; //将textBox1.Text 转换为byte 数组 temp = Encoding.Default.GetBytes(textBox1.Text); //利用Encoding 类的Convert 方法,将temp 的编码由gb2312 转换为big5 编码 temp = Encoding.Convert(Encoding.GetEncoding("gb2312"),Encoding.GetEncoding("big5"),temp); //将byte 数组转换为string textBox2.Text = Encoding.Default.GetString(temp); } 三、 C# .Net中的类型转换 1. 装箱、拆箱还是别名

相关主题
相关文档
最新文档