c++ - 如何将输入值拆分为 4 位 vector ,例如将 n 位拆分为每个部分 vector 的半字节?

标签 c++ vector bit digits

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

第一步,输入的是一串可变长度的二进制(长度可以是128位/位,也可以是256位/位,只要位数能被4整除即可),插入该长度转换成一个 vector ,每个 vector 都包含一个半字节或 4 位,所以我可以将它转换成十六进制,然后用它来确定它应该传输哪种 DTMF 音调。

我在一个类中编写代码,其中数字拆分 vector 的函数称为 std::vector splitbit();

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

我尝试使用 bitset,但它只适用于常数。如果我使用 vector,它可能会工作,但代码会太长并且浪费大量资源。

输入写成unsigned 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}。

最佳答案

因为你没有在dtmf::splitbit()函数中清除bitsplit。 让它像这样:

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

或者如果您想继续使用 bitsplit:

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

关于c++ - 如何将输入值拆分为 4 位 vector ,例如将 n 位拆分为每个部分 vector 的半字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58712955/

相关文章:

c++ - 根据条件拆分 STL 列表

c++ - 如何正确地从 uint16_t 变量中提取一个特定位

c++ - 如何检查套接字是否在 Boost.Asio 中关闭?

c++ - 使用 BST 实现队列

java - 对于想要快速入门的 Java 程序员来说,哪些 Visual C++ 引用资料值得一看?

c++ - 在数组中存储 n 个 vector

c++ - 在 vector C++ 中查找坐标

c++ - C 192位数组到4个24char数组的数组

c - 交换 16 位值的前 8 位和后 8 位

c++ - 输入文件读取错误