我有以下几个方面:
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中将值放入y0的方式是调用lfsr函数,如下所示:
lfsr(x0, y0);我做错了什么?
我必须从x0开始做3个Fibonacci线性反馈移位寄存器。
x0 = 10101010101010
y0 = lfsr(101010101010)
z0 = lfsr(y0)
dT0 = lfsr(z0);结果是好的,但是当我执行上述代码时,如果我使用指针,x0的值将与dT0相同。有谁可以帮我?
谢谢。垃圾堆!
发布于 2013-12-20 03:00:18
请考虑以下几点:

数字对应于水龙头。位数实际上是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在调用fibLfsr()之前将字符串转换为uint16_t,然后再返回到字符串。
https://stackoverflow.com/questions/20694616
复制相似问题