gpt4 book ai didi

C#定义为函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:38:39 24 4
gpt4 key购买 nike

我现在想用函数替换定义

这是定义

#define f_rn(bo, bi, n, k)  do {                \
bo[n] = crypto_ft_tab[0][byte(bi[n], 0)] ^ \
crypto_ft_tab[1][byte(bi[(n + 1) & 3], 1)] ^ \
crypto_ft_tab[2][byte(bi[(n + 2) & 3], 2)] ^ \
crypto_ft_tab[3][byte(bi[(n + 3) & 3], 3)] ^ *(k + n); \
} while (0)


#define f_nround(bo, bi, k) do {\
f_rn(bo, bi, 0, k); \
f_rn(bo, bi, 1, k); \
f_rn(bo, bi, 2, k); \
f_rn(bo, bi, 3, k); \
k += 4; \
} while (0)

我希望将它们放在函数中而不是定义中。

这是调用定义的片段:

f_nround(b1, b0, kp);
f_nround(b0, b1, kp);

我的想法是做以下事情

void enc_round(uint32_t b0[4], uint32_t b1[4], const uint32_t *kp)
{
for (int n = 0; n<4; n++)
{
b0[n] = crypto_ft_tab[0][byte(b1[n], 0)] ^
crypto_ft_tab[1][byte(b1[(n + 1) & 3], 1)] ^
crypto_ft_tab[2][byte(b1[(n + 2) & 3], 2)] ^
crypto_ft_tab[3][byte(b1[(n + 3) & 3], 3)] ^ *(kp + n);
}
kp += 4;
}

但这并没有像预期的那样成功,因为结果现在是错误的。

关于如何正确执行此操作的任何建议?

最佳答案

kp += 4;

这一行没有用(在函数内部)。它只更改指针的本地副本。如果想让指针在函数外改变,需要传递指针的地址:

void enc_round(uint32_t b0[4], uint32_t b1[4], const uint32_t **kpp)
{
for (int n = 0; n<4; n++)
{
b0[n] = crypto_ft_tab[0][byte(b1[n], 0)] ^
crypto_ft_tab[1][byte(b1[(n + 1) & 3], 1)] ^
crypto_ft_tab[2][byte(b1[(n + 2) & 3], 2)] ^
crypto_ft_tab[3][byte(b1[(n + 3) & 3], 3)] ^ *(*kpp + n);
}
*kpp += 4;
}

uint32_t *kp;
/* ... */
enc_round(b0, b1, &kp);

或者,您可以在调用该函数后更改kp

关于C#定义为函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24884156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com