簡體   English   中英

如何將輸入值拆分為 4 位向量,例如將 n 位拆分為每個部分向量的半字節?

[英]how do i split input values into 4 digit vector, like n bits into nibble per part vector?

我有一個項目來傳輸聲波與電腦通信。

第一步是輸入是可變長度的二進制字符串(長度可以是 128 位/位或 256 位/位,只要位數可以被 4 整除),然后將該長度插入到向量中每個向量都包含一個半字節或 4 位,因此我可以將其轉換為十六進制,然后使用它來確定它應該傳輸的 DTMF 音調。

我在 class 中編寫了代碼,其中數字分割向量的 function 稱為 std::vector splitbit();

我之所以調用 short int 是因為我的應用程序不想占用太多空間。

我嘗試使用 bitset,但它只適用於一個常數。 如果我使用矢量,它可能會起作用,但代碼會太長並且浪費大量資源。

輸入以 unsigned long long int 形式寫入,但 integer 一次只能取 20 位 (2^64)

這是 header 代碼:

#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();
};

這是輸入 function:

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 的 output 一次只給出一位,比如我寫 1101,output 是 {1,1,0,1},如果我寫 11000110 我得到 {1,10, ,0,0,1,1,0}(如果我將 i 更改為 8)而不是 {1100,0110}。

因為您沒有清除dtmf::splitbit() bitsplit中的 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM