#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 в порядке.