[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]
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]