Member 11446383 Ответов: 2

Преобразование отрицательного индекса в C в C#


I have to convert my code from c with pointers into c#
code in C is like this 

myMethodName(Word16 exc[],Word16 T0)
{
  Word16 *p_exc;
  Word16 *a;
  a=&(exc[-T0])
  a++;
  b=a;
  c=a;
  a++;
  p_exc = exc;
for (i = 10; i > 0; i--)
{
	s2 += ((Word32) * (b--));
	s1 += ((Word32) * (b));
        s1 += ((Word32) * (c++));
        s2 += ((Word32) * (c));
}
*(p_exc++) = (Word16)(s1 >> 15);
}


Что я уже пробовал:

I Have tried this
myMethodName(Int16[] exc,Int16 T0)
{
 Int16 pIndex=0;
 Int16 a=0;
 a = T0;
a++;
b=a;
c=a;
for (i = 10; i > 0; i--)
{
	s2 += ((Int32) * (b--));
	s1 += ((Int32) * (b));
        s1 += ((Int32) * (c++));
        s2 += ((Int32) * (c));
}
p_exc[pIndex++] = (Int16)(s1 >> 15);
}

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Преобразование отрицательного индекса в C в C#

В принципе, отрицательных индексов не существует.
Вам нужно понять базовую структуру, которая, по-видимому, имеет отрицательный индекс, когда на самом деле это положительный индекс с другим базовым адресом.

Вам нужно проанализировать свое приложение, чтобы понять, что есть что.


Member 11446383

Спасибо за ответ
Пожалуйста,объясните на примере, я этого не понимаю

Рейтинг:
0

OriginalGriff

Это не будет компилироваться без использования unsafe ключевое слово - не рекомендуется использовать указатели в C# без очень веской причины и unsafe ключевое слово (и опция сборки) существуют для обеспечения этого.
И ваш код C# значительно отличается от оригинала C, чтобы гарантировать, что даже с unsafe и использование указателей, это не будет делать ту же самую работу без существенных изменений во внешнем коде, а также.

Вообще говоря, преобразование с одного языка на другой не приводит к "хорошему коду" и начинается с чего-то, используя отрицательные индексы, если, вероятно, никогда не будет работать хорошо.
Вам было бы гораздо лучше использовать код C в качестве руководства и выяснить, зачем ему нужны такие индексы. Затем разрабатывайте код C#, который этого не делает - в результате вы получите гораздо более ремонтопригодный код.


Member 11446383

Спасибо за ответ
Пожалуйста,объясните на примере, я этого не понимаю

OriginalGriff

Чего ты не понимаешь?