I am new in C# and I will really appreciate some help about 2 Java methods I need to implement in C#
public static String getTerminatedString(ByteBuffer buf) {
return new String(getTerminatedArray(buf));
}
public static byte[] getTerminatedArray(ByteBuffer buf) {
int start = buf.position();
while(buf.get() != 0) {}
int end = buf.position();
byte[] bytes = new byte[end - start - 1]; //don't include terminator
buf.position(start);
buf.get(bytes);
//put position after array
buf.position(end); //skip terminator
return bytes;
}
Thanks in advance!!!
UPDATED:
So far I wrote this:
public static String getTerminatedString(byte[] buf)
{
try
{
unsafe
{
byte[] res = getTerminatedArray(buf);
fixed (byte* ptr_byte = &res[0]) // NullRef exception here
{
sbyte* ptr_sbyte = (sbyte*)ptr_byte;
return new String(ptr_sbyte);
}
}
}
catch (NullReferenceException nre)
{
Console.Error.WriteLine(nre.Message + Environment.NewLine + nre.StackTrace);
return null;
}
}
public static byte[] getTerminatedArray(byte[] buf)
{
try
{
int start = buf[0];
int end = 0;
for (int i = 0; i < buf.Length; i++)
{
if (buf[i] == 0)
{
end = i;
break;
}
}
byte[] bytes = new byte[end - start - 1]; //overflow exeption here
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] = buf[i];
}
return bytes;
}
catch (OverflowException oe)
{
Console.Error.WriteLine(oe.Message + Environment.NewLine + oe.StackTrace);
return null;
}
}
but I got the 2 exceptions marked above. I checked the logic behind these ByteBuffer methods and dunno what am I doing wrong >.>
So the nullreferenceexception is a result of the catch block return null. The problem is in byte[] bytes = new byte[end - start - 1]; (in case my implementation is correct... Is it? :D)