std.digest
nesnelerinde std.algorithm.copy
kullandığımda, put
bayt bayt kullandığımda karşılaştırılan farklı sonuçlar elde ediyorum. Niye ya?std.algorithm.copy ve std.digest
import std.stdio;
import std.digest.digest;
import std.digest.md;
import std.algorithm;
void main() {
string s = "Hello!\n";
auto d1 = makeDigest!MD5;
auto d2 = makeDigest!MD5;
foreach (ubyte b; s) {
d1.put(b);
}
s.copy(d2);
writeln(digest!MD5(s).toHexString);
writeln(d1.finish().toHexString);
writeln(d2.finish().toHexString);
}
Çıktı:
E134CED312B3511D88943D57CCD70C83
E134CED312B3511D88943D57CCD70C83
D41D8CD98F00B204E9800998ECF8427E
İşte hata raporu: https://issues.dlang.org/show_bug.cgi?id=9102 Herhangi bir neden olup olmadığını hatırlamıyorum kopya neden aralığı ref geçmiyor. Değer tipi çıktı aralıklarının yasal olup olmadığını asla belirtmedik (ve InputRanges için açık bir şekilde tanımlanmamıştır). Sindirimler için uygulanması gereken bir şey bu (bu) sessiz kopyalamayı önlemek için devre dışı bırakılmıştır. Ama sanırım geçerli bir kodu da kırdığı için artık geç olması gerekiyor. – jpf
Bir geçici çözüm olarak, MD5 yerine MD5Digest (bir sınıf) kullanabilirsiniz (bu bir yapıdır). – Thayne