මගේ දැනුමට අනුව, ලබා දී ඇති පිළිතුරු කිසිවක් ශුන්ය අවසන් කිරීම සමඟ නිවැරදි හැසිරීම සහතික නොකරයි. කවුරුහරි මට වෙනස් ලෙස පෙන්වන තුරු පහත දැක්වෙන ක්රම සමඟ මෙය හැසිරවීම සඳහා මම මගේම ස්ථිතික පන්තියක් ලිවීය:
// Mimics the functionality of strlen() in c/c++
// Needed because niether StringBuilder or Encoding.*.GetString() handle \0 well
static int StringLength(byte[] buffer, int startIndex = 0)
{
int strlen = 0;
while
(
(startIndex + strlen + 1) < buffer.Length // Make sure incrementing won't break any bounds
&& buffer[startIndex + strlen] != 0 // The typical null terimation check
)
{
++strlen;
}
return strlen;
}
// This is messy, but I haven't found a built-in way in c# that guarentees null termination
public static string ParseBytes(byte[] buffer, out int strlen, int startIndex = 0)
{
strlen = StringLength(buffer, startIndex);
byte[] c_str = new byte[strlen];
Array.Copy(buffer, startIndex, c_str, 0, strlen);
return Encoding.UTF8.GetString(c_str);
}
එයට හේතුව startIndex
මා වැඩ කරමින් සිටි උදාහරණයේ byte[]
දී ශුන්යව අවසන් කරන ලද නූල් සමූහයක් ලෙස විග්රහ කිරීමට මට අවශ්ය විය . සරල නඩුවේදී එය ආරක්ෂිතව නොසලකා හැරිය හැකිය