Ответ 1
static byte[] StringToByteArray(string str, int length)
{
return Encoding.ASCII.GetBytes(str.PadRight(length, ' '));
}
каким-то образом не удалось найти это с помощью поиска Google, но я чувствую, что он должен быть простым... Мне нужно преобразовать строку в массив байтов фиксированной длины, например. напишите "asdf" в массив byte[20]
. данные передаются по сети в приложение С++, которое ожидает поле фиксированной длины, и оно отлично работает, если я использую BinaryWriter
и пишу символы один за другим, и набиваю его, записывая "\ 0" соответствующий количество раз.
есть ли более подходящий способ сделать это?
static byte[] StringToByteArray(string str, int length)
{
return Encoding.ASCII.GetBytes(str.PadRight(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);
Это один из способов сделать это:
string foo = "bar";
byte[] bytes = ASCIIEncoding.ASCII.GetBytes(foo);
Array.Resize(ref bytes, 20);
Вы можете использовать Encoding.GetBytes.
byte[] byteArray = new byte[20];
Array.Copy(Encoding.ASCII.GetBytes(myString), byteArray, System.Math.Min(20, myString.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, но вы всегда можете их обнулить вручную)
Byte[] bytes = new Byte[20];
String str = "blah";
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
bytes = encoding.GetBytes(str);
И только для полноты LINQ:
(str + new String(default(Char), 20)).Take(20).Select(ch => (byte)ch).ToArray();
Для вариации этот фрагмент также выбирает для перевода символа Unicode непосредственно в ASCII, поскольку первые 127 символов Юникода определены в соответствии с ASCII.
FieldOffset, может быть?
[StructLayout(LayoutKind.Explicit)]
public struct struct1
{
[FieldOffset(0)]
public byte a;
[FieldOffset(1)]
public int b;
[FieldOffset(5)]
public short c;
[FieldOffset(8)]
public byte[] buffer;
[FieldOffset(18)]
public byte d;
}
(c) http://www.developerfusion.com/article/84519/mastering-structs-in-c/