我是 C# 新手,非常感谢我需要在 C# 中实现的 2 个 Java 方法的帮助
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;
}
提前致谢!!!
更新:
到目前为止,我写了这个:
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;
}
}
但我得到了上面标记的 2 个例外。我检查了这些 ByteBuffer 方法背后的逻辑,但不知道我做错了什么>。>
所以 nullreferenceexception 是 catch 块返回 null 的结果。问题出在 byte[] bytes = new byte[end - start - 1]; (如果我的实现是正确的......是吗?:D)