base64函数的学习程序

本文探讨了使用D语言进行Base64编码和解码时遇到的问题,包括assert断言失败的原因分析及数组定义与初始化的理解,并对Base64编码长度进行了详细解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[code]import std.stdio;
import std.base64;

void main()
{
char[] a;
char[] b;
char[] c;

// 方法1
a = "%%%abdsfds%";
a = "张33";
writefln("a string (%d):\t%s", a.length, a);

b = encode(a);
writefln("b string (%d):\t%s", b.length, b);

c = decode(b);
writefln("c string (%d):\t%s", c.length, c);

assert(c == a);

writefln();

// 方法2

char[] d;
char[] e = new char[100];
char[] f = new char[100];
e[] = 0;
f[] = 0;

d = "%%%ABCCCC%AFDSFDS%";
d = "CCCCAAFDSFDSAAAAAA";
d = "张33";

writefln("d string (%d):\t%s", d.length, d);

encode(d, e);
e.length = encodeLength(d.length);
writefln("e string (%d):\t%s", e.length, e);

decode(e, f);
f.length = decodeLength(e.length);
writefln("f string (%d):\t%s", f.length, f);

assert(d == f);
}[/code]

有两点不清楚:
1,最后的assert不正确。不清楚为什么,请教高手。

2,方法2的写法正确吗?数组的定义和初始化还不是十分清楚。
是不是e[] = 0;是多余的。
char[e] = new char[100]; 语句是不是就是分配100个字节空间?

这种写法会不会更好一些。
char[] e;
e.length = encodeLength(d.length);

2007年8月7日:
去把base64里面的函数调试了一下。发现encodeLength / decodeLength根本不是编码解码后的字符串长度,只是一个最大长度。传入的字符串应该大于等于这个长度,函数才继续执行而已。
传入的buffer长度和返回值的长度之间的关系(base64里面的unittestl例子):
[quote]buffer: 3
return: f, 1

buffer: 3
return: fo, 2

buffer: 3
return: foo, 3

buffer: 6
return: foos, 4

buffer: 33
return: all your base64 are belong to foo, 33

buffer: 18
return: testing some more, 17

buffer: 9
return: asdf jkl;, 9

buffer: 12
return: base64 stuff, 12

buffer: 18
return: foo!, 18
[/quote]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值