0

我在将 12 转换为汉明码时遇到问题。我已经验证它正确地将数字转换为二进制(base-2),现在当我尝试使用公式正确转换安全位时,它给了我一个与我应该得到的不同的答案。


#include <iostream>
#include <vector>
using namespace std;

void print(vector<int> x){
   
    for (int i = 0; i < x.size(); i++){
        cout << x[i];
    }
    cout << endl;
  
}

vector<int> correctCode(vector<int> x, int pos){
    vector<int> correctedCode = x;
    cout << "Wrong Code: ";
    print(x);
    
    if (correctedCode[pos] == 0){
        correctedCode[pos] = 1;
    }
    else
    {
        correctedCode[pos] = 0;
    }
    cout << "Corrected Code: ";
    print(correctedCode);
    return correctedCode;
}

//Convert
void convertBinary(int val){
    vector<int> binaryVal;
    vector<int> binaryBase = {64,32,16,8,4,2,1};
    for (int i=0; i < 7; i++){
        if(val >= binaryBase[i]){
            val -= binaryBase[i];
            binaryVal.push_back(1);
        }
        else{
            binaryVal.push_back(0);
        }
    }
    //Security 1
    binaryVal[0] = (binaryVal[2]+binaryVal[4]+binaryVal[6])%2;

    
    //Security 2
    binaryVal[1] = (binaryVal[2]+binaryVal[5]+binaryVal[6])%2;
    
    //Security 3
    binaryVal[3] = (binaryVal[4]+binaryVal[5]+binaryVal[6])%2;
   
    
    
    print(binaryVal);
}

int main(int argc, const char * argv[]) {
    

    cout << "12 = ";
    convertBinary(12);
    cout << endl;

   
}

二进制 = 0001100

12 = 1001100(是我得到的)应该是= 0111100(来自我的教授提到的)

4

1 回答 1

0

将二进制转换为汉明时出错。我只是将二进制代码的最后四位分配给消息位,然后在正确计算安全位后插入消息位。

    
    int m3,m5,m6,m7;
    m3 = binaryVal[3];
    m5 = binaryVal[4];
    m6 = binaryVal[5];
    m7 = binaryVal[6];
    
    binaryVal[0] = (m3+m5+m7)%2;
    binaryVal[1] = (m3+m6+m7)%2;
    binaryVal[3] = (m5+m6+m7)%2;
    
    binaryVal[2] = m3;
    binaryVal[4] = m5;
    binaryVal[5] = m6;
    binaryVal[6] = m7;
    
于 2021-07-30T21:02:54.887 回答