我如何将输入值分成4位向量,就像将n位分成每个部分向量半字节?

问题描述 投票:0回答:1

我有一个传输声波以与计算机通信的项目。

第一步是输入是一串长度可变的二进制文件(长度可以是128位/数字或256位/数字,只要数字的位数可以被4整除),并将该长度插入一个向量,每个向量都包含一个半字节或4位,因此我可以将其转换为十六进制,然后使用它来确定应传输的DTMF音调。

[我在将数字分割向量的功能称为std :: vector splitbit();的类中编写了代码]]

之所以调用short int的原因是我的应用程序不想占用太多空间。

我尝试使用位集,但仅适用于常数。如果我使用矢量,它可能会起作用,但是代码太长,浪费很多资源。

输入以无符号long long int形式编写,但整数一次只能包含20个数字(2 ^ 64)

这是标题代码:

#pragma once
#include "stdafx.h"
class dtmf
{
private:
    unsigned int decimal,remainder,power;
    unsigned long long int bit;
    std::vector<std::vector<unsigned short>> dtmffreq;
    std::vector<unsigned short>selectfreq[16], index, bitsplit;
//  std::vector<unsigned unsigned long long int> bitlen[128];
public:
    dtmf();
    void inifreq();
    void printfreq();
    void bitinput();
    std::vector<unsigned short> getfreq();
    std::vector<unsigned short int> splitbit();
    unsigned int bit2dec();
};

这是输入功能:

void dtmf::bitinput()
{
    std::cin >> bit;
}

std::vector<unsigned short int> dtmf::splitbit()
{
    for (size_t i = 0; i < 4; i++)
    {
        bitsplit.push_back((bit/=10)%10);
    }
    return bitsplit;
}

[当我调试系统时,bitsplit的输出一次只给出一位,就像我写1101一样,输出是{1,1,0,1},而如果我写11000110则得到{1,1 ,0,0,0,1,1,0}(如果我将i更改为8),而不是{1100,0110}。

我有一个传输声波以与PC进行通信的项目。第一步是输入是一串长度可变的二进制文件(长度可以是128位/位或256位/位,如...

c++ vector bit digits
1个回答
0
投票

因为未在bitsplit功能中清除dtmf::splitbit()。使它像这样:

© www.soinside.com 2019 - 2024. All rights reserved.