Skip to main content

Printing a C# char array until '\0'

After lot of googling, I finally found that char (or byte) arrays in C# do not have substring search. It has to be a String to do the same. It started with a sample code in MSDN for MemoryStream Class:

int count;
byte[] byteArray;
char[] charArray;
UnicodeEncoding uniEncoding = new UnicodeEncoding();

// Create the data to write to the stream.
byte[] firstString = uniEncoding.GetBytes(
"Invalid file path characters are: ");
byte[] secondString = uniEncoding.GetBytes(
Path.GetInvalidPathChars());

using (MemoryStream memStream = new MemoryStream(100))
{
// Write the first string to the stream.
memStream.Write(firstString, 0, firstString.Length);

// Write the second string to the stream, byte by byte.
count = 0;
while (count < secondString.Length)
{
memStream.WriteByte(secondString[count++]);
}

// Write the stream properties to the console.
Console.WriteLine(
"Capacity = {0}, Length = {1}, Position = {2}\n",
memStream.Capacity.ToString(),
memStream.Length.ToString(),
memStream.Position.ToString());

// Set the position to the beginning of the stream.
memStream.Seek(0, SeekOrigin.Begin);

// Read the first 20 bytes from the stream.
byteArray = new byte[memStream.Length];
count = memStream.Read(byteArray, 0, 20);

// Read the remaining bytes, byte by byte.
while (count < memStream.Length)
{
byteArray[count++] =
Convert.ToByte(memStream.ReadByte());
}

// Decode the byte array into a char array
// and write it to the console.
int charCnt = uniEncoding.GetCharCount(
byteArray, 0, count);
charArray = new char[charCnt];
uniEncoding.GetDecoder().GetChars(
byteArray, 0, count, charArray, 0);

Console.WriteLine(charArray);
}
Now this piece of code, when executed printed some non-printable chars. After debugging, found that Console.Writeline prints the whole array and does not stop when '\0' is found. Was trying to figure out if there is a way I can find the count of valid chars and pass it to WriteLine. The alternate solution I could think of is as below.

String str = new String(charArray);
int strend = str.IndexOf('\0');
str = str.Remove(strend);
Console.WriteLine(str);

Ofcourse a straight way (possibly more efficient) was to parse through the array and print but was curious to explore other ways :-)

Comments

Popular posts from this blog

Setting up SVN on Windows

Since I started doing development and there were revisions, I felt the need for a local version control. Heard SVN is good and also setting up is a cake walk. Well, I had my doubts. Setting up a version control server can't be a cake walk!! I was proved wrong. Setting up SVN: 1. Downloaded SVN from tigris site here and install Note: Before creating a repository refer the Subversion documentation that comes along with the SVN to know more details about planning your repository organization etc. It has a good write up. 2. I decided to create one repository for each of my software projects. So here it goes... Issue the following command to create a repository: > svnadmin create "d:\svn_rep\myproj" > dir d:\svn_rep\myproj conf db format hooks locks README.txt This creates a new directory "d:\svn_rep\myproj" which contains the SVN repository. 4. Now setup your project files in a directory as below: d:\tmp\helloworld\branches\ d:\tmp\helloworld...

Windows 7 preview of windows open in task bar

Windows 7 has an option to show the preview of the windows open when you click on it in the task bar. Well, if you don't like it and want it to display just like good old XP, then there is a way. Go to Control Panel > System and Security > System Click on Advanced system settings Select Advanced tab and under performance click settings. Under 'Visual Effect' select custom and uncheck /check 'enable desktop composition'. This will disable/enable preview of windows on the taskbar. Here is the performance options window: If you have unchecked it, then display is as below: