我怎样才能让函数接受4位二进制字符串并返回64位字符串

How can I get the function to take in a 4-bit binary string and return a 64-bit one?

本文关键字:二进制字符 4位 串并 返回 字符串 64位 函数      更新时间:2023-10-16

我已经为LFSR编写了函数(甚至不确定它是否正确),但我试图让它以4位字符串作为输入并返回64位。

#include <iostream>
#include <bitset>
#include <ctime>
#include <cstdlib>
#include <random>
using namespace std;
void linshift(int s)
{
    int y = 0;
    int count = 0;
    std::bitset<4> lfsr(s);
    std::bitset<4> bit(y);
    do
    {
        cout << "lfsr: " << lfsr << endl;
        bit = ((lfsr >> 0) ^ (lfsr >> 2));
        lfsr = (lfsr >> 1) | (bit << 3);
        ++count;
    } while (count < 4);
    cout << endl;
}

我的教授建议使用char,但输出只是符号而不是二进制。

编辑:也许这将有助于更好地解释我想问的问题。

种子s是线性反馈移位寄存器的起始状态。这是一个随机的4位价值。通过让线性反馈移位寄存器产生64位输出来产生G(s)。

 stringstream ss;
 do
{
    ss << lfsr ;
    bit = ((lfsr >> 0) ^ (lfsr >> 2));
    lfsr = (lfsr >> 1) | (bit << 3);
    ++count;
} while (count < 16);
return ss.str()

Visual Studio对语法有点挑剔。lfsr[0]^lfsr[2]是一个非极大lfsr,每6个循环重复一次。Lfsr [0]^ Lfsr[1]或Lfsr [0]^ Lfsr[3]是最大Lfsr,每15个周期重复一次。注意lfsr[0]对应于多项式项x^4, lfsr[1]对应于x^3, lfsr[2]对应于x^2, lfsr[3]对应于x, bit对应于不存在的lfsr[4]对应的1。

#include <iostream>
#include <bitset>
using namespace std;
void linshift(int s)
{
    int count = 0;
    bitset<4> lfsr(s);
    bitset<1> bit;
    do
    {
// lfsr polynomial = x^4 + x   + 1 = maximal lfsr, repeats every 15 cycles
//      bit = lfsr[0] ^ lfsr[3];
// lfsr polynomial = x^4 + x^3 + 1 = maximal lfsr, repeats every 15 cycles
//      bit = lfsr[0] ^ lfsr[1];
// lfsr polynomial = x^4 + x^2 + 1 = non-max lfsr, repeats ever   6 cycles
        bit = lfsr[0] ^ lfsr[2];
        lfsr = (lfsr >> 1) ^ bitset<4>(bit[0] << 3);
        ++count;
        cout << bit;
    } while (count < 64);
    cout << endl;
}
int main()
{
    for(int i = 1; i < 16; i++)
        linshift(i);
    return 0;
}