Как обрезать или дописать лишние байты в строке?

287
09 февраля 2018, 17:43

Допустим, у нас есть строка в UTF-8. Она должна занимать в памяти ровно 38 байт. Ни больше, не меньше, чтобы не допустить смещение указателей. Символы там могут занимать как один, так и два байта. Как это реализовать наиболее просто в C#? Размер строки в байтах хранится в int переменной.

Answer 1

Чтобы узнать длину в байтах в конкретной кодировке есть метод GetByteCount, от него и нужно плясать. А вообще в UTF-8 символ может и 3, и 4 байтами кодироваться, но не суть. Например метод возвращающий массив байтов определённой длины с обрезанной или наоборот дополненной стройкой в определённой кодировке.

byte[] GetCutBytes(string str, int maxlength, Encoding encoding)
{
    char[] charArray = str.ToCharArray();
    int length = charArray.Length;
    while (encoding.GetByteCount(charArray, 0, length) > maxlength)
        length--;
    byte[] returned = new byte[maxlength];
    encoding.GetBytes(charArray, 0, length, returned, 0);
    return returned;
}
READ ALSO
Не могу составить linq-запрос

Не могу составить linq-запрос

Есть список объектов со следующей структурой(что-то вроде оповещений):

233
Конвертация универсального типа <T> в Nullable<T>?

Конвертация универсального типа <T> в Nullable<T>?

Как из метода GetValue() возвратить значение типа Nullable

207
Передача параметров в функцию BitConverter.ToUInt32

Передача параметров в функцию BitConverter.ToUInt32

Очень глупый, скорее всего, вопрос

227
C# - Обсуфикация в динамической компиляции

C# - Обсуфикация в динамической компиляции

Здравствуйте, собственно интересует каким образом можно зашифровать, обсуфицировать программу которая создается в динамической компиляции

193