আমার জ্ঞান অনুসারে, প্রদত্ত উত্তরগুলির মধ্যে কোনওটি নাল সমাপ্তির সাথে সঠিক আচরণের গ্যারান্টি দেয়। যতক্ষণ না কেউ আমাকে অন্যভাবে দেখায় আমি নিম্নলিখিত পদ্ধতিগুলি সহ এটি পরিচালনা করার জন্য নিজের স্ট্যাটিক ক্লাসটি লিখেছিলাম:
// 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[]
নাল টার্মিনেটেড স্ট্রিংগুলির একটি অ্যারে হিসাবে পার্স করা দরকার । এটি সাধারণ ক্ষেত্রে নিরাপদে উপেক্ষা করা যেতে পারে