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, ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access