Это позволяет избежать цикла, который многократно добавляет строку.Вместо этого я «удваиваю» строку до тех пор, пока она не приблизится к нужной длине, а затем соответствующим образом соединю «сдвоенные» кусочки.
static string Repeat(string s, int length) {
if (length < s.Length) {
return s.Substring(0, length);
}
var list = new List<string>();
StringBuilder t = new StringBuilder(s);
do {
string temp = t.ToString();
list.Add(temp);
t.Append(temp);
} while(t.Length < length);
int index = list.Count - 1;
StringBuilder sb = new StringBuilder(length);
while (sb.Length < length) {
while (list[index].Length > length) {
index--;
}
if (list[index].Length <= length - sb.Length) {
sb.Append(list[index]);
}
else {
sb.Append(list[index].Substring(0, length - sb.Length));
}
}
return sb.ToString();
}
Так, например, при вводе («Привет, мир!", 64) мы строим строки
13: Hello, World!
26: Hello, World!Hello, World!
52: Hello, World!Hello, World!Hello, World!Hello, World!
Затем мы строим результат путем конкатенации строки длиной 52 с подстрокой длины 12 строки длины 13.
IЯ, конечно, предполагаю, что под байтами вы подразумевали длину.В противном случае вы можете легко изменить вышеперечисленное, используя кодировки, чтобы получить то, что вы хотите в виде байтов.