请帮我翻译这个C++的一个Base64编码的函数为纯Unicode格式的?

来源:百度知道 编辑:UC知道 时间:2024/07/02 07:12:27
#pragma once

static char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

char* base64_encode(const void *data, int size)
{
char *s, *p;
int i;
int c;
const unsigned char *q;

p = s = (char*)malloc(size*4/3+4);
if (p == NULL)
return -1;
q = (const unsigned char*)data;
i=0;
for(i = 0; i < size;){
c=q[i++];
c*=256;
if(i < size)
c+=q[i];
i++;
c*=256;
if(i < size)
c+=q[i];
i++;
p[0]=base64[(c&0x00fc0000) >> 18];
p[1]=base64[(c&0x0003f000) >> 12];
p[2]=base64[(c&0x00000fc0) >> 6];
p[3]=base64[(c&0x0000003f) >> 0];
if(i > size)
p[3]='=';
if(i > size+1)
p[2]='=';
p+=4;
}
*p=0;
return &s;
}

因为要在Windows CE下使用,CE是纯Unicode的环境,不能使用ANSI,请问怎么做成纯Unicode的?

你是指翻译这个源程序的文本从ASCII 到 unicode 吗?
用 notepad 就可以。

notepad my_prog.c
然后用光标抹一下这段文字,变深色,揿 Ctrl+C 组合键(就是复制),把光标移动到 notepad my_prog.c 的窗,揿 Ctrl+V 组合键(就是粘贴),然后 save as 存放 my_prog.c 选 unicode 就可以了。

如果你是指 解码 ABCDEFGHIJKLMNO... base64, 再输出为 unicode,
你要分解 3*8 为 4*6. 如果是加密的 base64, 要解密。 unicode编码 A->Z 是 0xff21 - 0xff3a, a->z 是 0xff41 - 0xff5a . 大endian
小endian 的区别是字节顺序。文本文件头有 magic number 区分 unicode 编码。

Base64编码算法详解见参考资料:

用unicode 来编码base64的话,耗费内存的.
如果返回值的缓冲区类型不变,就返回类型修改为 VOID*好了.

如果返回类型变成 TCHAR 的话,里面的算法过程都要修改.
....

不能用ansi那还叫c么 只是没有ansi版本的windows api 吧, 你这里又没用到windows api

把所有的char替换为THCAR

不懂啊啊啊啊 啊啊