我有以下变量:
char seed[NBITS + 1], x0[NBITS + 1], y0[NBITS + 1], z0[NBITS + 1], dT0[NBITS + 1];
我想在此功能上更改它的值:
void lfsr(char *bin, char *output)
{
//bits significativos para fazer o xor NBITS -> NBITS,126,101,99;
int bits[4];
int bit;
if(bin[0] == '0')
bits[0] = 0;
else if(bin[0] == '1')
bits[0] = 1;
if(bin[2] == '0')
bits[1] = 0;
else if(bin[2] == '1')
bits[1] = 1;
if(bin[21] == '0')
bits[2] = 0;
else if(bin[21] == '1')
bits[2] = 1;
if(bin[19] == '0')
bits[3] = 0;
else if(bin[19] == '1')
bits[3] = 1;
bit = bits[0] ^ bits[1] ^ bits[2] ^ bits[3] ^ 1;
//reconstruir o vector de char depois do lfsr
for(int i = 127; i >= 1; i--)
{
bin[i] = bin[i - 1];
}
bin[0] = (char)(48 + bit);
output = bin;
}
我将x中的值放入y的方式是,例如,调用lfsr函数,如下所示:
lfsr(x0, y0);
我做错了什么?
我必须从x0开始做3个Fibonacci线性反馈移位寄存器。
x0 = 10101010101010
y0 = lfsr(101010101010)
z0 = lfsr(y0)
dT0 = lfsr(z0);
结果很好,但是当我执行上面的代码时,如果使用指针,x0的值将与dT0相同。 任何人都可以帮助我吗?
感谢。 Cumps!
答案 0 :(得分:3)
请考虑以下事项:
数字对应于水龙头。这些位实际上是15..0,从左到右。以下是我对Fibonacci线性反馈移位寄存器的实现:
#include <stdio.h>
uint16_t fibLfsr(const uint16_t num)
{
uint16_t tempNum;
tempNum = (num) ^ (num >> 2) ^ (num >> 3) ^ (num >> 5);
tempNum = (tempNum & 0x1) << 15;
tempNum = (tempNum | (num >> 1));
return tempNum;
}
int main(void)
{
uint16_t testNum = 0xACE1;
printf("%#X\n", testNum);
testNum = fibLfsr(testNum);
printf("%#X\n", testNum);
return 0;
}
我不太确定你为什么要使用字符串并将它们转换为二进制文件。如果有必要,您需要stdlib
和string
中的一些标准库API将字符串转换为uint16_t
,然后再调用fibLfsr()
并返回字符串之后。