我有一个传输声波以与计算机通信的项目。
第一步是输入是一串长度可变的二进制文件(长度可以是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位/位,如...
因为未在bitsplit
功能中清除dtmf::splitbit()
。使它像这样: