public override int Parse(byte[] data, int offset)
{
base.Parse(data, offset);
if(this.IsNullTerminated)
{
int nullTerminator=-1;
for(int i = offset;i < data.Length;i++)
{
if(data[i]==0)
{
nullTerminator=i;
break;
}
}
if(nullTerminator==-1 || nullTerminator==data.Length) // null-terminator was not found.
{
throw new FieldParsingException(this.GetType(),"Invalid ASCII text field: not null terminated.");
}
this.Text=Encoding.UTF8.GetString(data, offset, nullTerminator-offset);
return nullTerminator-offset+1;
}
else
{
this.Text=Encoding.UTF8.GetString(data, offset, data.Length-offset);
int nullTerminator=this.Text.IndexOf('\0');
if(nullTerminator!=-1)
{
this.Text=this.Text.Substring(0, nullTerminator);
}
return data.Length-offset;
}
}