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, ...
Get C# Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.