Я думаю, что что-то похожее на следующее обеспечит то, что вы ищете ..
byte[] data = System.Text.Encoding.UTF8.GetBytes(theString).Take(2048).ToArray();
или
byte[] source = System.Text.Encoding.UTF8.GetBytes(theString);
byte[] destination = new byte[2048];
Buffer.BlockCopy(source, 0, destination, 0, 2048);
Редактировать: добавлен пример для комментария ..
Это обеспечит вас List<byte[]>
кусками по 2 КБ, стоит отметить, что это написано не для эффективности, а в качестве примера, хотя оно выполнит работу, не настроенную на высокую производительность.
string theString = new string('*', 1022574);
byte[] allData = System.Text.Encoding.UTF8.GetBytes(theString);
int numberOfChunks = (int)Math.Ceiling((double)(allData.Length) / 2048);
List<byte[]> chunks = new List<byte[]>(numberOfChunks);
for (int i = 0; i < numberOfChunks; i++) {
chunks.Add(allData.Skip(i * 2048).Take(2048).ToArray());
}