Many methods in the FCL accept a
byte[]
consisting of characters instead of a
string
. Some of these methods include:
System.Net.Sockets.Socket.Send System.Net.Sockets.Socket.SendTo System.Net.Sockets.Socket.BeginSend System.Net.Sockets.Socket.BeginSendTo System.Net.Sockets.NetworkStream.Write System.Net.Sockets.NetworkStream.BeginWrite System.IO.BinaryWriter.Write System.IO.FileStream.Write System.IO.FileStream.BeginWrite System.IO.MemoryStream.Write System.IO.MemoryStream.BeginWrite System.Security.Cryptography.CryptoStream.Write System.Security.Cryptography.CryptoStream.BeginWrite System.Diagnostics.EventLog.WriteEntry
In many cases, you might have a string
that you
need to pass into one of these methods or some other method that only
accepts a byte[]
. You need a way to break up this
string
into a byte[]
.
To
convert a string
to a byte
array of ASCII
values, use the
GetBytes
method on an instance of the
ASCIIEncoding
class:
using System; using System.Text; public static byte[] ToASCIIByteArray(string characters) { ASCIIEncoding encoding = new ASCIIEncoding( ); int numberOfChars = encoding.GetByteCount(characters); byte[] retArray = new byte[numberOfChars]; retArray = encoding.GetBytes(characters); return (retArray); }
To
convert a string
to a byte
array of Unicode values, use the UnicodeEncoding
class:
public static byte[] ToUnicodeByteArray(string characters) { UnicodeEncoding encoding = new UnicodeEncoding( ); int numberOfChars = encoding.GetByteCount(characters); byte[] retArray = new byte[numberOfChars]; retArray = encoding.GetBytes(characters); return (retArray); }
The GetBytes
method of the
ASCIIEncoding
class converts
ASCII
characters—contained in either a
char
array or a
string
—into a byte
array
of 7-bit ASCII
values. Any value larger than
127
is converted to the ?
character. The ASCIIEncoding
class can be found in
the System.Text
namespace. The
GetBytes
method is overloaded to accept additional
arguments as well. The overloaded versions of the method convert all
or part of a string
to ASCII
and then store the result in a specified range inside a
byte
array, which is returned to the caller.
The GetBytes
method of the
UnicodeEncoding
class converts Unicode characters
into 16-bit Unicode values. The UnicodeEncoding
class can be found in the System.Text
namespace.
The GetBytes
method returns a
byte
array, each element of which contains the
Unicode value of a single character of the string.
A single Unicode character in the source string
or
in the source char
array corresponds to two
elements of the byte
array. For example, the
following byte
array contains the
ASCII
value of the letter 'S
':
byte[] sourceArray = {83};
However, for a byte
array to contain a Unicode
representation (UTF-16 encoded) of the letter 'S
',
it must contain two elements. For example:
byte[] sourceArray = {83, 0};
The Intel architecture uses a little-endian encoding, which means
that the first element is the least-significant byte and the second
element is the most-significant byte. Other architectures may use
big-endian encoding, which is the opposite of little-endian encoding.
The UnicodeEncoding
class supports both big-endian
and little-endian encodings. Using the
UnicodeEncoding
instance constructor, you can
construct an instance that uses either big-endian or little-endian
ordering. In addition, you have the option to indicate whether a byte
order mark preamble should be generated so that readers of the file
will know which endianness is in use.