Генерация кода Squawk (4-значный восьмеричный идентификатор) в C++

Я пытаюсь сгенерировать в своем проекте C++ squawk коды, чтобы назначить их радиолокационной цели.

Коды Squawk используются для идентификации самолетов с использованием вторичного радара, это 4-значные восьмеричные коды (например, 7066 7067 7070...): http://en.wikipedia.org/wiki/Transponder_%28aeronautics%29

Я хотел бы иметь функцию, которая генерирует код кривошипа, основанный на последнем данном, этот код в данный момент хранится в 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 
        }
    }

Я до сих пор не нашел ничего о том, как на самом деле сделать это без необходимости генерировать все существующие коды и выбирать следующий из них.

Я все еще новичок в C++, и помощь будет принята с благодарностью.

Cordialement

1 ответ

Решение
#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;
}

Живая версия.

Другие вопросы по тегам