беззнаковый указатель на символ в C #? - PullRequest
0 голосов
/ 29 января 2011

Во время перевода некоторого кода из C ++ в C # я нашел это,

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

Как мне перевести это на C #?m_pRecvBuffer - это массив символов, однако я храню его как байтовый массив.

Ответы [ 4 ]

2 голосов
/ 29 января 2011

Вы анализируете, что на самом деле делает код, и переводите поведение, а не код.Хотя вы можете использовать unsafe методы и арифметику указателей в c #, это, вероятно, создаст больше проблем, чем решит.

2 голосов
/ 29 января 2011

Хмм Интересно, будет ли какой-то рефакторинг для этого куска кода? Да, вы можете использовать указатели в C # . Однако, основываясь на этом фрагменте, могут быть лучшие варианты. Похоже, вы пытаетесь прочитать части входящего потока. Может быть, потоковая библиотека C # будет работать лучше для этого фрагмента вашего кода?

1 голос
/ 29 января 2011

Что-то похожее на

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

должно быть достаточно, я думаю.

0 голосов
/ 29 января 2011

Предполагая, что RecvBuffer объявлен как байт [], вы должны сделать что-то вроде этого:

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