【发布时间】:2011-01-29 15:06:12
【问题描述】:
在将一些代码从 C++ 翻译成 C# 的过程中,我发现了这个,
unsigned char *p = m_pRecvBuffer + 5;
unsigned int noncelen1 = *p * 256 + p[1];
如何将其翻译成 C#? m_pRecvBuffer 是一个字符数组,但我将它存储为一个字节数组。
【问题讨论】:
标签: c# c++ pointers unsigned-char
在将一些代码从 C++ 翻译成 C# 的过程中,我发现了这个,
unsigned char *p = m_pRecvBuffer + 5;
unsigned int noncelen1 = *p * 256 + p[1];
如何将其翻译成 C#? m_pRecvBuffer 是一个字符数组,但我将它存储为一个字节数组。
【问题讨论】:
标签: c# c++ pointers unsigned-char
嗯,我想知道是否需要对这段代码进行一些重构。是的,您可以使用pointers in C#。但是,基于该 sn-p 可能会有更好的选择。看起来您正在尝试读取传入流的部分内容。也许 C# 的 stream library 更适合您的这段代码?
【讨论】:
您分析代码的实际作用并翻译行为,而不是代码。虽然您可以在 c# 中使用 unsafe 方法和指针运算,但这可能会产生比它解决的问题更多的问题。
【讨论】:
类似于
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];
【讨论】: