Генерация кода 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;
}