views:

88

answers:

2

I have a byte array that may or may not have null bytes at the end of it. After converting it to a string I have a bunch of blank space at the end. I tried using Trim() to get rid of it, but it doesn't work. How can I remove all the blank space at the end of the string after converting the byte array?

I am writing this is C#.

+1  A: 
public string TrimNulls(byte[] data)
{
    int rOffset = data.Length - 1;

    for(int i = data.Length - 1; i >= 0; i--)
    {
        rOffset = i;

        if(data[i] != (byte)0) break;            
    }

    return System.Text.Encoding.ASCII.GetString(data, 0, rOffset + 1);
}

In the interest of full disclosure, I'd like to be very clear that this will only work reliably for ASCII. For any multi-byte encoding this will crap the bed.

Adam Robinson
Please add that your solution works great for ASCII encoding (as the OP requested), but will break horribly for anything else.
Jim Mischel
That will work. Thanks. i was hoping to be able to do something like Trim on the resulting string, but I guess not. Thanks!
Brian
Small bug with this solution. The return value should be: return System.Text.Encoding.ASCII.GetString(data, 0, rOffset+1);Otherwise it will cut off the last byte.
Brian
@Brian: I already added that a few minutes ago, but thanks ;)
Adam Robinson
+1  A: 

Trim() does not work in your case, because it only removes spaces, tabs and newlines AFAIK. It does not remove the '\0' character. You could also use something like this:

byte[] bts = ...;

string result = Encoding.ASCII.GetString(bts).TrimEnd('\0');

Antonio Nakic Alfirevic