Merhaba,
Bu konu sadece D dilini ilgilendirmiyor. Aslında tam olarak D Dili ile yapmak istediğim bir çözümü yine bu forumda bulmuş ve yayınlamış oluyorum. Elbette forum, D ile ilgili olduğuna göre yine aşağıdaki basit kodlar, aynı dilin mahsulü...:)
Kodlara geçmeden evvel bir özeleştiri yapmalıyım!
Sanırım, internete başladığımdan beri (1996'lı yıllar) hep karşıma çıkan Base32 konusunda hiç çalışmamış olmam ve böyle bir temel konuyu öğrenmeyişim, büyük bir eleştiri konusu olsa gerek. Öyle ya, e-postaların ekli dosyalarından tutun da internette hep karşımıza gelir bu Base32 kodlama. Gerçi ben bilinçli olarak standartlardan uzaklaşarak, Crockford'un abecesini ve kendi kodlamamı kullanmak istedim. Ama sonuçta işin tekniğini öğrendim ve belki hızlı bir algoritma geliştirmeyi amaçlamakla suçumu affetirmiş olurum inşaallah...
Bu tartışma şurada alevlenmişti: http://ddili.org/forum/thread/1094
import std.stdio;
struct Base32v65 {
string abece;
ulong[char] dizin;
this(string alphabet) {
this.abece = alphabet;
foreach(i, a; abece) {
dizin[a] = i;
}
}
auto encode (ulong veri) @property{
string dizge;
do {
dizge ~= abece[veri & 31];
} while(veri>>=5);
return dizge;
}
auto decode (string veri) @property {
ulong sayı;
foreach(i, v; veri) {
sayı += dizin[v] * (32UL ^^ cast(ulong)i);
}
return sayı;
}
}
void main() {
/* Alphabetical Reference:
* http://www.crockford.com/wrmg/base32.html
*/ string rfc4648 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
/*
*http://tools.ietf.org/html/rfc4648
*/ string alphabet = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
auto rakamlar = 9876543210UL;
auto base32 = Base32v65(rfc4648);
string deneme = base32.encode(ulong.max);//rakamlar);
deneme.writeln(": Base32v65 Encoded");
ulong çözücü = base32.decode(deneme);
çözücü.writeln(": Base32v65 Decoded");
/+ Toogle Switch On/Off
long.max.writeln(": long.max"); //9223372036854775807: long.max
writefln("%b", long.max);/* 63.bit--------------------------v
111111111111111111111111111111111111111111111111111111111111111
*/
ulong.max.writeln(": ulong.max"); //18446744073709551615: ulong.max
writefln("%b", ulong.max);/* 64.bit--------------------------v
1111111111111111111111111111111111111111111111111111111111111111
*/
/*v----Toggle Switch Close
+/
//*/
}
Başarılar...
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]