Я просматриваю код, который был переведен с C на C#. У меня есть вопрос по оригинальной C:Понимание функции C для перевода C#
...
#define getblock(p, i) (p[i])
...
void MurmurHash3_x86_32 (const void * key, int len,
uint32_t seed, void * out)
{
const uint8_t * data = (const uint8_t*)key;
const int nblocks = len/4;
int i;
uint32_t h1 = seed;
uint32_t c1 = 0xcc9e2d51;
uint32_t c2 = 0x1b873593;
const uint32_t * blocks = (const uint32_t *)(data + nblocks*4);
for(i = -nblocks; i; i++)
{
uint32_t k1 = getblock(blocks,i);
...
Часть for(i = -nblocks; i; i++) ...
является это зацикливание через данные в обратном направлении? Я никогда не видел данные, относящиеся к отрицательному индексу.
Почему бы не отладить его или просто распечатать 'i' в начале каждого цикла, чтобы узнать, что происходит? Это должно сделать поведение довольно ясным. – Servy
Я пишу на C# в Visual Studio. Я считаю, что источником является GNU C. – IamIC
Значит, у вас нет средств для выполнения исходного кода? Если вы сделаете переписывание, я найду способ исправить это; вы должны иметь возможность запускать фрагменты кода, который вы переводите, чтобы помочь вам лучше понять, что он делает. Невозможность выполнить какой-либо код C вообще еще хуже и не должна быть слишком сложной для исправления. – Servy