在将一些代码从 C++ 转换为 C# 的过程中,我发现了这个,
unsigned char *p = m_pRecvBuffer + 5;
unsigned int noncelen1 = *p * 256 + p[1];
如何将其翻译成 C#?m_pRecvBuffer
是一个字符数组,但是我将它存储为一个字节数组。
在将一些代码从 C++ 转换为 C# 的过程中,我发现了这个,
unsigned char *p = m_pRecvBuffer + 5;
unsigned int noncelen1 = *p * 256 + p[1];
如何将其翻译成 C#?m_pRecvBuffer
是一个字符数组,但是我将它存储为一个字节数组。
嗯,我想知道是否需要对这段代码进行一些重构。是的,您可以在 C# 中使用指针。但是,基于该片段可能会有更好的选择。看起来您正在尝试读取传入流的部分内容。也许 C# 的流库更适合您的这段代码?
您分析代码的实际作用并翻译行为,而不是代码。虽然您可以unsafe
在 c# 中使用方法和指针算术,但这可能会产生比它解决的问题更多的问题。
类似于
byte[] p = new byte[m_pRecvBuffer.Length - 5];
Array.Copy(m_precvBuffer, p, m_pRecvBuffer.Length - 5);
uint noncelen1 = p[0] * 256 + p[1];
但在那种情况下,我认为您实际上不需要使用数组副本。只是使用
uint noncelen1 = p[5] * 256 + p[6];
应该够了,我猜。
假设 RecvBuffer 被声明为 byte[],你会做这样的事情:
int noncelen1 = RecvBuffer[5] * 256 + RecvBuffer[6];