c указывает эквивалентный логин в javascript

#javascript #c #node.js

#javascript #c #node.js

Вопрос:

Я пытаюсь преобразовать эту c функцию в javascript класс:

 for(i=0; i<inputLen; i  )
{
    //Calculate the constants
    pucSeqX = m_pucSeqX;
    pucSeqM = m_pucSeqM;
    for(j=0; j<m_iRounds; j  )
    {
        *(pucSeqX  ) = arc4_getRandom();
        *(pucSeqM  ) = arc4_getRandom();
    }
    //The last m_iRounds-1 rounds
    ucPlain = rostrIn[i];
    pucSeqX = m_pucSeqX   m_iRounds1;
    pucSeqM = m_pucSeqM   m_iRounds1;
    for(j=m_iRounds-1; j>0; j--,pucSeqX--,pucSeqM--)
    {
        if(*pucSeqM <= ucPlain)
            ucPlain -= *pucSeqM;
        else
        {
            ucPlain  = ~*pucSeqM;
            ucPlain  ;
        }
        ucPlain ^= *pucSeqX;
    }
  

Это моя попытка:

   for(i = 0; i < buf.length; i  )
  {
    pucSeqX = m_pucSeqX
    pucSeqM = m_pucSeqM

    for(j = 0; j < m_iRounds; j  )
    {
      pucSeqX[j] = this.getRandom()
      pucSeqM[j] = this.getRandom()
    }

    console.log(pucSeqX)
    console.log(pucSeqM)

    ucPlain = buf[i]
    pucSeqX = m_pucSeqX   m_iRounds1
    pucSeqM = m_pucSeqM   m_iRounds1

    for (j = m_iRounds-1; j > 0; j--, pucSeqX--, pucSeqM--)
    {
      if (pucSeqM <= ucPlain)
        ucPlain -= pucSeqM
      else {
        ucPlain  = ~pucSeqM
        ucPlain  
      }

      ucPlain ^= pucSeqX
    }
  

Но, похоже, это не приводит к тем же результатам. Есть ли что-то, чего мне не хватает?

Меня смущают указатели в коде C и то, как они будут в javascript.

Комментарии:

1. В JavaScript нет понятия указателей. Нам было бы полезно помочь вам, если бы вы показали остальную часть программы и то, что она должна делать.

2. @Chirag64 можно найти @ runnable

Ответ №1:

У меня есть только очень базовые знания Javascript, поэтому я дам вам только эквиваленты C-кода для вашего кода, который вы можете преобразовать более легко.

Здесь

 pucSeqX = m_pucSeqX   m_iRounds1;
pucSeqM = m_pucSeqM   m_iRounds1;
  

m_pucSeqX является значением указателя (возможно, разложенным массивом), а операторы эквивалентны

 pucSeqX = amp;m_pucSeqX[m_iRounds1];
pucSeqM = amp;m_pucSeqM[m_iRounds1];
  

В следующем for цикле вы уменьшаете указатели pucSeqX and pucSeqM , которые в начале цикла указывают на m_iRounds1 -indexed элементы m_pucSeqX and m_pucSeqM , соответственно, чтобы вы могли уменьшить индексы и получить доступ к массиву:

 pucSeqX_ind = m_iRounds1;
pucSeqM_ind = m_iRounds1;

for (j = m_iRounds-1; j > 0; j--, pucSeqX_ind--, pucSeqM_ind--)
{
    if (m_pucSeqM[pucSeqM_ind] <= ucPlain)
        ucPlain -= m_pucSeqM[pucSeqM_ind];
    else {
        ucPlain  = ~m_pucSeqM[pucSeqM_ind];
        ucPlain  ;
    }

    ucPlain ^= m_pucSeqX[pucSeqX_ind];
}
  

HTH

Комментарии:

1. Я проверяю это. даст вам обратную связь.

2. По-прежнему не дает мне тех же значений, что и код C. Не могли бы вы попробовать просмотреть весь файл C и JS?

3. @majidarif: этот код на C не дает того же результата, что и исходный код на C? Или вы имеете в виду, что ваша транскрипция этого в JS не делает? Какой длины весь ваш файл?

4. Я считаю, что мои транскрипции не соответствуют действительности. Это довольно коротко. 50 строк кода.

5. @majidarif: Да, 50 LOC в порядке.