机内码到Base64的编码转换

Base64是一种将二进制转为可打印字符的编码方法,主要用于邮件传输。Base64就是将64个字符(A-Z,a-z,0-9,+,/)作为基本字符集,把所有符号转换为这个字符集中的字符。为了将机内码转换为Base64编码,首先建立一个Base64码表(如下图),每次从输入流中取6bit,将此6bit作为下标查找Base64码表,输入对应字符。这样,没3字节机内码被转换为4字节的Base64编码。编码的结果出现最后不满4个字符时用 “=”填充。

Base64码表

代码如下:

#include<stdio.h>
char table[64]=
{
	'A','B','C','D','E','F','G','H','I','J','K','L','M','N' ,'O','P','Q','R','S','T','U','V','W','X','Y','Z',
	'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u' ,'v','w','x','y','z',
	'0','1','2','3','4','5','6','7','8','9','+','/'
};
void conv(unsigned char src[],unsigned char des[])
{
	des[0]=src[0]>>2;
	unsigned char tmp=((src[0]&0X03)<<4);
	des[1]=tmp|(src[1]>>4);
	tmp=((src[1]&0X0F)<<2);
	des[2]=tmp|(src[2]>>6);
	des[3]=src[2]&0X3F;
	for(int i=0;i<4;i++)
	{
		des[i]=table[des[i]];
	}
}
void main()
{
	FILE*fp1=fopen("in.txt","rb");
	FILE*fp2=fopen("out.txt","wt");
	unsigned char src[4]={0};
	unsigned char des[5]={0};
	int c;
	while((c=fread(src,sizeof(unsigned char),3,fp1))==3)
	{
		conv(src,des);
		fprintf(fp2,"%s",des);
	}
	if(c==1)
	{
		src[1]=src[2]=0;
		conv(src,des);
		des[2]=des[3]='=';
		fprintf(fp2,"%s",des);
	}
	if(c==2)
	{
		src[2]=0;
		conv(src,des);
		des[3]='=';
		fprintf(fp2,"%s",des);
	}
	fclose(fp1);
	fclose(fp2);
}
时间: 11-01

机内码到Base64的编码转换的相关文章

Base64的编码转换方式

下面,详细介绍Base64的编码转换方式. 所谓Base64,就是说选出64个字符----小写字母a-z.大写字母A-Z.数字0-9.符号"+"."/"(再加上作为垫字的"=",实际上是65个字符)----作为一个基本字符集.然后,其他所有符号都转换成这个字符集中的字符. 具体来说,转换方式可以分为四步. 第一步,将每三个字节作为一组,一共是24个二进制位. 第二步,将这24个二进制位分为四组,每个组有6个二进制位. 第三步,在每组前面加两个00

C# 字节流通过Base64编码转换成图片代码

C# 字节流通过Base64编码转换成图片代码 // 需载入以下的命名空间 // using System.IO; // using System.Drawing; // using System.Runtime.Serialization.Formatters.Binary; protected void Page_Load(object sender, EventArgs e) { byte[] buffer = ReadFile(Server.MapPath(@"\sex.txt"

编码转换

using System;using System.Collections.Generic;using System.Text; namespace taobao{ class EncodingTransfer { static public string UnicodeToGB2312(string unicodeStr) { string gb2312info = "你好!"; string utfinfo = string.Empty; Encoding utf8 = Encod

Node.js 编码转换

Node.js自带的toString()方法不支持gbk,因此中文转换的时候需要加载第三方库,推荐以下两个编码转换库,iconv-lite和encoding. iconv, iconv-lite和encoding是什么? iconv:是在类Unix系统中一种标准字符集转换接口,用于在不同字符集编码之间进行转换,最早出现在HP-UX系统中. iconv-lite:是iconv的纯js实现,支持的编码包括node.js原生编码:utf8, ucs2, ascii, binary, base64:同时

关于raw_input输入中文时的编码转换

今日在敲代码时出现了如下问题 中文的编码出现了问题(在键盘输入中文时也会出现同样的问题),中文的编码应该是utf-8编码格式,有以下两种方式来进行编码转换: (1)decode用法:str  -> decode('the_coding_of_str') -> unicode 即写为格式:raw_input('净利润为:'.decode('utf-8').encode('gbk')) (2)encode用法:unicode -> encode('the_coding_you_want')

Linux下查看文件编码,文件编码格式转换和文件名编码转换

linux相关   2008-10-07 10:46   阅读1392   评论0   字号: 大大  中中  小小  如果你需要在Linux中 操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是 UTF-8.下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换. 查看文件编码 在Linux中查看文件编码可以通过以下几种方式: 1.在Vim中可以直接查看文件编码 :set file

关于JS的编码转换问题

在进行JS开发过程中,尤其是在开发报表时,报表已集成到Web页面中,通过在页面传递参数至报表中时,会发现有时某些参数值,传递到报表中是显示为问号或乱码等等一系列不能正常显示的情况. 这是由于浏览器和报表服务器的编码不同,字符多次进行编码转换时出现错误导致字符的显示出现乱码,尤其是中日韩文和特殊字符更容易出现乱码问题. 以开发报表软件FineReport为例,在给报表服务器发送请求之前,对URL或者只对URL里面的参数名字和参数值,进行cjkEncode的编码,该方式兼容了各种不同的字符集,如IS

Nim-字符串编码转换

Nim中对字符串进行转码需要用到encodings模块. encodings模块: proc getCurrentEncoding():string {.raises: [],tags: [].} #检索当前系统编码,在UNIX上,总是返回"UTF-8". proc open(destEncoding = "UTF-8"; srcEncoding = "CP1252"): EncodingConverter {. raises: [Overflo

gbk转utf-8 iconv 编码转换

linux下面有时候 字符需要进行编码转换(爬虫将gbk转为utf-8编码...),一般可以选择iconv函数. 终端下面  输入 man 3 iconv 得到  iconv函数的使用方法. 个人看习惯了,msdn文档之后感觉linux下面的文档的看的不是那么爽了. 使用iconv函数进行转码,一般使用三个函数:iconv_open  . iconv  .iconv_close三个函数. iconv_t iconv_open(const char* tocode,const char* from