เพื่อความรู้ของฉันไม่มีคำตอบที่กำหนดรับประกันพฤติกรรมที่ถูกต้องกับการยกเลิก null จนกว่าจะมีคนแสดงให้ฉันแตกต่างฉันเขียนคลาสคงที่ของฉันเองสำหรับการจัดการสิ่งนี้ด้วยวิธีการต่อไปนี้:
// 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[]
เป็นอาร์เรย์ของสตริงที่สิ้นสุดโมฆะ สามารถละเว้นได้อย่างปลอดภัยในกรณีง่าย ๆ