2013-12-20 38 views
1

我有以下瓦爾:發送變量的函數和修改這個變量使用C

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); 

我在做什麼錯?

我必須做3斐波那契線性反饋移位寄存器從x0開始。

x0 = 10101010101010 
y0 = lfsr(101010101010) 
z0 = lfsr(y0) 
dT0 = lfsr(z0); 

結果很好,但是當我做上面的代碼時,如果我使用指針,x0的值將與dT0相同。 任何人都可以幫助我嗎?

謝謝。 Cumps!

+0

這是乞求循環。 –

+0

這是什麼意思,'output = bin;'?似乎完全沒有必要。 –

+0

多數民衆贊成多數民衆贊成在問題..我不知道如何將bin值傳遞給變量y0 ..我試過使用指針,但隨後在該函數中輸入的所有變量將是相同的。 – arturataide

回答

3

考慮以下幾點:

enter image description here

中的數字對應的水龍頭。這些位實際上是15..0,從左到右。以下是我的執行斐波納契線性反饋移位寄存器的:

#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()並返回字符串。

+0

您的回答是正確的。我正在使用128位二進制數。所以我需要使用char向量。非常感謝你。 Cumps! – arturataide

+0

@arturataide如果水龍頭是相同的,轉換'fibLfsr()'接受並返回一個128位數字應該是非常簡單的。 –