用零填充向量

时间:2020-03-26 12:31:04

标签: c++ vector padding

我的纯文本首先转换为二进制文本,然后应分为64位块,并且密钥必须分别加密tese块。例如,如果我的文本有90位,则应在其后加上零,以使其具有128位。我不知道该怎么做。这是我的代码:

string ifile = "filetxt.txt";
string ofile = "file2.txt";
string key = "keywordd";
vector<int> k;
vector<int> txt;
char text;
vector<int> o;
int i;
int c = 0;
int d = 1;

void f() {
    ifstream ist ("filetxt.txt");
    ofstream ost ("file2.txt");
    int a[64], i;
    while (ist >> text) {
        for(char& text : key) {
            for(i=0; i < 8; i++){
                a[i] = text%2;
                text = text/2;
            }
            for(i=i-1; i >= 0 ;i--){
                k.push_back(a[i]);
            }
        }
        if (ist) {
            for(i=0; i < 8; i++){
                a[i] = text%2;
                text = text/2;
            }
            for(i=i-1 ;i >= 0 ;i--){
                txt.push_back(a[i]);
            }
            for(int j = 0; j < 8; j++) {
                if(k[j] == txt[j]) {
                    o.push_back(c);
                } else if (k[j] != txt[j]) {
                    o.push_back(d);
                }
            }
            for(i=0; i<8; i++) {
                ost << o[i];
            }
            for(i=0; i<8; i++) {
                cout << o[i];
            }
        }
    }
    cout << endl;
    for(i=0; i<64; i++) {
        cout << k[i];
    }
    cout << endl;
    for(i=0; i<64; i++) {
        cout << txt[i];
    }
}
int main()
{
    f();
    return 0;
}

我要做这样的事情:

if (txt.size()< 64){
    for(i= 0; i< 64- txt.size();i++){
        txt.push_back(c);
    }
}

我认为问题出在txt矢量中,因为如果我要打印它,我

3 个答案:

答案 0 :(得分:3)

这很简单:

if (txt.size()< 64)
    txt.resize(64);

这将简单地将向量填充为int的默认值,即0。

如果您想要一个非0的值(如代码建议的c),则为:

if (txt.size()< 64)
    txt.resize(64, c);

答案 1 :(得分:2)

您想要的是https://www.tutorialgateway.org/ssis-xml-task-to-transform-xml-file-using-xslt/。默认情况下,它将向量的大小增加到所请求的大小(如果向量小于该大小),并且添加的任何元素都将被值初始化,这对于int而言意味着零初始化。那给你

if (txt.size() % 64 != 0)
    txt.resize(txt.size() + (64 - (txt.size() % 64)));

还要注意,64个int不是64位。 int的大小必须至少为16位,这意味着其中的64位将至少为512位。如果您确实需要64位块,则应使用std :: uint64_t作为位块(或类似的东西)

答案 2 :(得分:1)

在最后一步中执行以下操作:

if ((txt.size() % 64) != 0){
    for(i= 0; i< 64-((txt.size() % 64)); i++){
        txt.push_back(c);
    }
}

这样,无论您的纯文本长度是多少,txt向量都将始终以64的倍数结尾,并在必要时填充零(c)。