我正在尝试将此 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 中的表现感到困惑。
最佳答案
我只有非常基本的 Javascript 知识,因此我只会为您提供与您的代码等效的 C 代码,您可以更轻松地进行转换。
这里
pucSeqX = m_pucSeqX + m_iRounds1;
pucSeqM = m_pucSeqM + m_iRounds1;
m_pucSeqX
是一个指针值(可能是一个衰减数组),语句相当于
pucSeqX = &m_pucSeqX[m_iRounds1];
pucSeqM = &m_pucSeqM[m_iRounds1];
在接下来的 for
循环中,您将递减指针 pucSeqX
和 pucSeqM
,它们在循环开始时指向 m_iRounds1
- 分别是 m_pucSeqX
和 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
关于javascript - C 指针相当于 JavaScript 中的登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24339059/