Запишите строку в массив байтов фиксированной длины в C#

так или иначе не мог найти это с поиском Google, но я чувствую, что это должно быть просто... Я должен преобразовать строку в массив байтов фиксированной длины, например, записать "asdf" в a byte[20] массив. данные отправляются по сети в приложение C++, которое ожидает поле фиксированной длины, и это хорошо работает, если я использую a BinaryWriter и запишите символы один за другим и заполните его путем записи '\0' соответствующее количество раз.

существует ли более соответствующий способ сделать это?

13
задан toasteroven 7 April 2010 в 20:19
поделиться

6 ответов

static byte[] StringToByteArray(string str, int length) 
{
    return Encoding.ASCII.GetBytes(str.PadRight(length, ' '));
}   
21
ответ дан 1 December 2019 в 19:01
поделиться

Возможно, с небезопасным кодом?

unsafe static void Main() {
    string s = "asdf";
    byte[] buffer = new byte[20];
    fixed(char* c = s)
    fixed(byte* b = buffer) {
        Encoding.Unicode.GetBytes(c, s.Length, b, buffer.Length);
    }
}

(байты в буфере по умолчанию равны 0, но вы всегда можете обнулить их вручную)

{ {1}}
1
ответ дан 1 December 2019 в 19:01
поделиться

Вы можете использовать Encoding.GetBytes .

byte[] byteArray = new byte[20];
Array.Copy(Encoding.ASCII.GetBytes(myString), byteArray, System.Math.Min(20, myString.Length);
2
ответ дан 1 December 2019 в 19:01
поделиться

Как насчет

String str = "hi";
Byte[] bytes = new Byte[20];
int len = str.Length > 20 ? 20 : str.Length;
Encoding.UTF8.GetBytes(str.Substring(0, len)).CopyTo(bytes, 0);
6
ответ дан 1 December 2019 в 19:01
поделиться
Byte[] bytes = new Byte[20];
String str = "blah";

System.Text.ASCIIEncoding  encoding = new System.Text.ASCIIEncoding();
bytes = encoding.GetBytes(str);
1
ответ дан 1 December 2019 в 19:01
поделиться

Вот один из способов сделать это:

  string foo = "bar";

  byte[] bytes = ASCIIEncoding.ASCII.GetBytes(foo);

  Array.Resize(ref bytes, 20);
7
ответ дан 1 December 2019 в 19:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: