O'Reilly logo

C# Cookbook by Jay Hilyard, Stephen Teilhet

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

16.10. Converting Pointers to a Byte[ ], SByte[ ],or Char[ ] to a String

Problem

You have obtained a pointer to a byte array, an sbyte array, or a char array. You want to convert this array into its string equivalent.

Solution

Use one of the string object’s constructors that build a string from either a byte*, sbyte*, or char* passed in as a parameter. The following overloaded ConvertToString methods accept a byte[], an sbyte[], or a char[] and return the equivalent string object created from these arrays:

public string ConvertToString(byte[] arr)
{
    unsafe
    {
        string returnStr;
        fixed(byte* fixedPtr = arr)
        {
            returnStr = new string((sbyte*)fixedPtr);
        }
    }

    return (returnStr);
}

public string ConvertToString(sbyte[] arr)
{
    unsafe
    {
        string returnStr;
        fixed(sbyte* fixedPtr = arr)
        {
            returnStr = new string(fixedPtr);
        }
    }

    return (returnStr);
}

public string ConvertToString(char[] arr)
{
    unsafe
    {
        string returnStr;
        fixed(char* fixedPtr = arr)
        {
            returnStr = new string(fixedPtr);
        }
    }

    return (returnStr);
}

The following code calls these methods, passing in one of the required array types:

Console.WriteLine(ConvertToString(new byte[3] {0x61,0x62,0x63}));
Console.WriteLine(ConvertToString(new char[3] {'a','b','c'}));
Console.WriteLine(ConvertToString(new sbyte[3] {0x61,0x62,0x63}));

Discussion

The System.String constructor that takes an sbyte* in the Solution code is expecting a null-terminated string in the buffer. There are also constructors on System.String that take an sbyte* and default to Unicode, ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required