用c ++编写Squawk代码(4位八进制标识符)

时间:2014-05-30 18:35:39

标签: c++ octal

我正在尝试在我的C ++项目中生成尖叫代码,以便将它们分配给雷达目标。

Squawk代码用于识别使用二级雷达的飞机,它们是4位八进制代码(例如7066 7067 7070 ......):http://en.wikipedia.org/wiki/Transponder_(aeronautics)

我想有一个函数根据给定的最后一个代码生成一个尖叫代码,此代码目前存储在一个int中。

我想有这样的事情:

        while (IsSquawkInUse(LAST_ASSIGNED_MODEA_VFR) && LAST_ASSIGNED_MODEA_VFR < 7070) {
        if (LAST_ASSIGNED_MODEA_VFR >= 7067) {
            break;
        }
        else {
            //increment LAST_ASSIGNED_MODEA_VFR 
        }
    }

我还没有找到任何关于如何实际做到这一点,而不必生成所有现有代码并从thoses中选择下一个代码。

我还是C ++的新手,非常感谢帮助。

Cordialement

1 个答案:

答案 0 :(得分:0)

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

int main() {
    // source number as string
    string x;
    cin >> x;
    // convert it into a number
    int y = 0;
    for (int i = 0, ilen = x.size(); i < ilen; ++i) {
        y *= 8; // it's octal
        y += x[i] - '0';
    }
    // add 1 to that number
    ++y;
    // if we have a code 7777, next should be 0000
    y = y & 07777;
    // clear string x, so that we can
    x.clear();
    // write an octal number there as string
    while (y) {
        x = char(y % 8 + '0') + x;
        y /= 8;
    }
    // output that number
    cout << x << endl;
}

Live version.