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, ...