あなたが入れたサンプルコードは、文字列をバイト配列に変換する必要があります。使用するエンコーディング (ASCII、Unicode など) によっては、同じ文字列から異なるバイト配列を取得する場合があります。
パケットという用語は、通常、ネットワーク経由でデータを送信するときに使用されます。しかし、パケット自体は単なるバイト配列です。
あなたが持っている情報は、myUsername、myPassword です。以下の C# コードが翻訳されます。
byte[] packet = new byte[] { 0x22, 0x00, 0x11, 0x00, 0x6D, 0x79, 0x75, 0x73, 0x65, 0x72, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x79, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6F, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
string test = Encoding.ASCII.GetString(packet);
Console.WriteLine(test);
Console.ReadKey();
似たようなものを作成するには、次のようにします。
const int HeaderLength = 2;
const int UsernameMaxLength = 16;
const int PasswordMaxLength = 16;
public static byte[] CreatePacket(int header, string username, string password)//I assume the header's some kind of record ID?
{
int messageLength = UsernameMaxLength + PasswordMaxLength + HeaderLength;
StringBuilder sb = new StringBuilder(messageLength+ 2);
sb.Append((char)messageLength);
sb.Append(char.MinValue);
sb.Append((char)header);
sb.Append(char.MinValue);
sb.Append(username.PadRight(UsernameMaxLength, char.MinValue));
sb.Append(password.PadRight(PasswordMaxLength, char.MinValue));
return Encoding.ASCII.GetBytes(sb.ToString());
}
次に、このコードを次のように呼び出します。
byte[] myTest = CreatePacket(17, "myusername", "mypassword");