将变量发送到函数并在C中修改此变量

时间:2013-12-20 01:02:43

标签: c variables pointers

我有以下变量:

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!

1 个答案:

答案 0 :(得分:3)

请考虑以下事项:

enter image description here

数字对应于水龙头。这些位实际上是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;
}

我不太确定你为什么要使用字符串并将它们转换为二进制文件。如果有必要,您需要stdlibstring中的一些标准库API将字符串转换为uint16_t,然后再调用fibLfsr()并返回字符串之后。