Как преобразовать целое число в массив символов и обратно, чтобы получить то же число? - PullRequest
0 голосов
/ 01 ноября 2019

Я хочу преобразовать целое число в массив символов и получить то же число из этого массива символов.

Рассмотрим число 20. Как 1 int (4 байта) = 1 символ,

0000 0000 0000 0000 0000 0001 0100 = (20) в десятичном виде

___ 0 ___0 ___0 ___0 ___0 ___0 ___1 ___4 = шестнадцатеричное представление

Я хочу, чтобы этот образец 00000014 был сохранен в массиве символов как 4символы только в виде целого числа занимают 4 символа пространства таким образом, что массив символов после преобразования в целое число (может использовать sscanf ()) даст тот же результат (20).

Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Вы можете использовать объединение

union myUnion { 

    int x;
    char bytes[sizeof(int)]; 
}; 

И использовать его следующим образом:

union myUnion un;
un.x = 98632;

С этим un.bytes удерживайте байты целого числа 98632 вэтот случай. Если вы изменяете любое из них, это изменение также отражается в un.x, поскольку все в union имеет общую ячейку памяти.

Преобразование выполняется автоматически для вас, если вы хотите intпросто получите его по un.x, а если хотите, байты - по un.bytes. Независимо от того, какого члена профсоюза вы меняете, это изменение также вносится в других его членов, поскольку оно является union.

0 голосов
/ 01 ноября 2019

Сопоставить каждую цифру от 0 до 15 с ее эквивалентом от 0 до f в гексе. Примените цикл while, взяв остаток числа при делении на 16, и добавьте его в строку и разделите его на 16 на каждом шаге. Последняя строка будет в обратном порядке, и я бы оставил ее в обратном порядке, если над ней нужно выполнить какие-либо операции. Если вы хотите распечатать его, напечатайте его в обратном порядке.

Чтобы преобразовать шестнадцатеричную строку обратно в int, выполните эту процедуру в обратном порядке.

char mapping[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

void convert(string& s, int n)
{
    while (n)
    {
        int r = n % 16;
        s += mapping[r];
        n /= 16;
    }
}

int main()
{
    int n = 20;
    string s;
    convert(s, n);
    cout << s << endl;
}
...