String To A Byte Array


 

preamble

this simple function converts a string to a byte[] that is in compliant with the visual c++ 6.0 BSTR/WCHAR.

why might you want to use it?

well for a start, for data compatability with those all programs you laboured over.

Another reason I use it is for eventlogging.

The EventLog class has an overloaded member function (WriteEntry) that allows you to end a byte array as the data for an event:public void WriteEntry(string message, EventLogEntryType type, int eventID, short category, byte[] rawData);

The value you pass as rawData appears in the Data pane when you view the Event\;s properties in the system\;s Event Viewer, thus:

figure 1 the data pane in the event properties

As you can see, the data pane provide an invaluable way of providing extra debugging information.

function declaration

protected internal void StringToByteArray(string theString, ref byte[] data, int offset) 
{
    int realI = 0;
    for(int i = 0; i < theString.Length; ++i)
    {
        realI = (i*2) + offset;
        data[realI] = (byte)(theString[i] & 0xFF);
        data[realI + 1] = (byte)((theString[i] & 0xFF00) >> 16);
    }
}

notes

the first thing to note is that no error checking occurs and that it\;s therefore very probable that exceptions will be thrown if the byte[] isn\;t big enough.

the offset parameter allows you to specify an offset, in bytes, from the start of the data array, to start copying into. It is important to realise that this is in bytes, as each element of a string is two bytes long.

example

string firstName = "Bill";
string surname = "Gates";

//for compatability with vc++6, remember to pad each string with two zero bytes at the end.
//also, as we\;re putting a space in the middle of the string, we need to add an extra two bytes.

byte[] bData = new byte[(firstName.Length + surname.Length) * 2 + 4] ;

StringToByteArray(firstName + " ", ref bData, 0); //copies firstName into the bData array

StringToByteArray(surname, ref bData,  (firstName.Length * 2) + 2);
//remember, each element in a string is two bytes long, and the space we added abve will count as an extra 2 bytes.

Twitter Digg Delicious Stumbleupon Technorati Facebook Email

No comments yet... Be the first to leave a reply!