Verilen herhangi bir şarkı akışını parçalara bölmek çok önemsiz bir çabadır.
Herhangi bir baytlık parça sorun olmadan da temel alabilirisiniz.
Karşılaştığınız sorun, parçalarınızdaki belirli gereksinimleri (3 bayt katları) koymadığınız sürece, base64 kodlu parçaların sırasının, istediğiniz gerçek çıktıdan farklı olacağıdır.
C# içinde, tembel bir şekilde yapabileceğiniz bir (özensiz) yol budur. Yürütme aslında string.Concat çağrılana kadar ertelenir, böylece yığın dizeleriyle istediğiniz her şeyi yapabilirsiniz. Ben gereksinimi (belirli bir tampon boyutunu kullanmak çünkü etrafında defterleri zorunda bir süre harcanan,
void Main()
{
var data = "lorum ipsum etc lol this is an example!!";
var bytes = Encoding.ASCII.GetBytes(data);
var testFinal = Convert.ToBase64String(bytes);
var chunkedBytes = bytes.Chunk(3);
var base64chunks = chunkedBytes.Select(i => Convert.ToBase64String(i.ToArray()));
var final = string.Concat(base64chunks);
testFinal.Dump(); //output
final.Dump(); //output
}
public static class Extensions
{
public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> list, int chunkSize)
{
while(list.Take(1).Count() > 0)
{
yield return list.Take(chunkSize);
list = list.Skip(chunkSize);
}
}
}
Çıktı
bG9ydW0gaXBzdW0gZXRjIGxvbCB0aGlzIGlzIGFuIGV4YW1wbGUhIQ==
bG9ydW0gaXBzdW0gZXRjIGxvbCB0aGlzIGlzIGFuIGV4YW1wbGUhIQ==
See (Eğer LINQPad içine bu fiş Eğer çıktıyı göreceksiniz) hangi değildi '3'ün katları. Beynim osuruktan kaybolduğunda, tampon boyutunu değiştirdim. Gerçekten, ben bir aptalım. Ve herkes soruyu "Tampon büyüklüğünü 3'ün katına çıkarın" ile yanıtlasa da, ilk önce sen olmalısın. Teşekkürler! – roryhewitt