如何将输入值拆分为4位矢量,就像将n位拆分为每部分矢量的半字节一样



我有一个项目要传输声波来与PC通信。

第一步是,输入是一个长度可变的二进制字符串(长度可以是128位/数字或256位/数字,只要数字的数量可以被4整除(,这个长度被插入到一个向量中,每个向量都包含一个半字节或4位,所以我可以将其转换为十六进制,然后用它来确定它应该发送哪个DTMF音调。

我在一个类中编写了代码,其中数字分割向量的函数被称为std::vector splitbit((;

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

我尝试过比特集,但它只适用于常量。如果我使用vector,它可能会工作,但代码会太长,浪费大量资源。

输入是用无符号长整型写的,但整数一次只能取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;
}

当我调试系统时,比特分割的输出一次只给出一个比特,就像我写1101一样,输出是{1,1,0,1},如果我写11000110,我得到{1,1,0,0,1,0}(如果我把I改为8(,而不是{11000110}。

因为您没有在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;
}

最新更新