так или иначе не мог найти это с поиском Google, но я чувствую, что это должно быть просто... Я должен преобразовать строку в массив байтов фиксированной длины, например, записать "asdf" в a byte[20]
массив. данные отправляются по сети в приложение C++, которое ожидает поле фиксированной длины, и это хорошо работает, если я использую a BinaryWriter
и запишите символы один за другим и заполните его путем записи '\0' соответствующее количество раз.
существует ли более соответствующий способ сделать это?
static byte[] StringToByteArray(string str, int length)
{
return Encoding.ASCII.GetBytes(str.PadRight(length, ' '));
}
Возможно, с небезопасным кодом?
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}}Вы можете использовать Encoding.GetBytes .
byte[] byteArray = new byte[20];
Array.Copy(Encoding.ASCII.GetBytes(myString), byteArray, System.Math.Min(20, myString.Length);
Как насчет
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);
Byte[] bytes = new Byte[20];
String str = "blah";
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
bytes = encoding.GetBytes(str);
Вот один из способов сделать это:
string foo = "bar";
byte[] bytes = ASCIIEncoding.ASCII.GetBytes(foo);
Array.Resize(ref bytes, 20);