0

在将一些代码从 C++ 转换为 C# 的过程中,我发现了这个,

unsigned char *p = m_pRecvBuffer + 5;
unsigned int noncelen1 = *p * 256 + p[1];

如何将其翻译成 C#?m_pRecvBuffer是一个字符数组,但是我将它存储为一个字节数组。

4

4 回答 4

2

嗯,我想知道是否需要对这段代码进行一些重构。是的,您可以在 C# 中使用指针。但是,基于该片段可能会有更好的选择。看起来您正在尝试读取传入流的部分内容。也许 C# 的流库更适合您的这段代码?

于 2011-01-29T15:10:18.323 回答
2

您分析代码的实际作用并翻译行为,而不是代码。虽然您可以unsafe在 c# 中使用方法和指针算术,但这可能会产生比它解决的问题更多的问题。

于 2011-01-29T15:10:29.900 回答
1

类似于

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];

应该够了,我猜。

于 2011-01-29T15:11:55.550 回答
0

假设 RecvBuffer 被声明为 byte[],你会做这样的事情:

int noncelen1 = RecvBuffer[5] * 256 + RecvBuffer[6];
于 2011-01-29T15:12:06.637 回答