在将一些代码从C ++转换为C#的过程中,我找到了这个,
unsigned char *p = m_pRecvBuffer + 5;
unsigned int noncelen1 = *p * 256 + p[1];
如何将其转换为C#? m_pRecvBuffer
是一个char数组,但我将其存储为字节数组。
答案 0 :(得分:2)
嗯,我想知道是否有一些重构是为了这段代码。是的,您可以使用pointers in C#。但是,根据该片段,可能会有更好的选择。看起来你正在尝试读取传入流的部分内容。也许C#的stream library对你的这段代码更有效?
答案 1 :(得分:2)
您分析代码实际执行的操作并转换行为,而不是代码。虽然您可以在c#中使用unsafe
方法和指针算法,但这可能会产生比解决方案更多的问题。
答案 2 :(得分: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];
应该足够了,我想。
答案 3 :(得分:0)
假设RecvBuffer被声明为byte [],你可以这样做:
int noncelen1 = RecvBuffer[5] * 256 + RecvBuffer[6];