To answer your second question:
byte[] data=ASCIIEncoding.ASCII.GetBytes(textBox1.Text);
Normally, text is stored as a sequence of characters, each of which is stored in a unicode format that takes several bytes per character. The ASCII format is an older format that uses one byte (in fact, originally 7 bits, and then extended to use 8 bits) per character.
The ASCIIEncoding provides a way of converting to or from this old format. The above line of code converts the text into an ASCII representation, and returns a "raw" array of bytes containing the text in that format.
Note that ASCII uses a byte for each character, so can only represent 256 different characters - Unicode can represent thousands of characters, so during the conversion, some characters will be lost (converted to a simpler form where acute/cedilla/umlaut is lost, or replaced by another character - e.g. "?")
(Typical advantages of doing this are that it may be easier to write code to process the simpler format, or that it uses less memory as it only uses one byte per character, or that you need to send the data to a "third party" that requires it to be ASCII)