2011-01-29 200 views
0

在從C++翻譯一些代碼,C#的中間,我發現了這一點,C#中的無符號字符指針?

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

如何翻譯成C#嗎? m_pRecvBuffer是一個字符數組,但我把它存儲爲一個字節數組。

回答

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

應該是夠了,我猜。

2

嗯我不知道是否一些重構將爲了這段代碼。是的,你可以使用pointers in C#。但是,基於該片段,可能會有更好的選擇。它看起來像你正在嘗試讀取傳入流的部分。也許C#的stream library會更適合你的這段代碼?

2

您可以分析代碼實際執行的內容並轉換行爲,而不是代碼。雖然可以在c#中使用unsafe方法和指針算術,但這可能會產生比解決問題更多的問題。

+0

是的,我知道這一點。然而,由於我比C++知道更多的C#,並且無法調試給出的代碼,所以我想把它放在C#中,然後將它重構爲好東西。 – 2011-01-29 15:19:48

+0

啊好的。對我來說同樣的問題,我的想法是數組索引,但我不能把它放在手指上。 – Femaref 2011-01-29 15:25:24

0

假設RecvBuffer被聲明爲字節[],你會做這樣的事情:

int noncelen1 = RecvBuffer[5] * 256 + RecvBuffer[6];