Как удалить персонажей? - PullRequest
0 голосов
/ 03 декабря 2009

Я запускаю (действительно запускаю) инструмент сборки, в то время как он преобразует только десятичное в шестнадцатеричное, но я хочу удалить нули из результата. Вот код:

// HexConvert.cpp
#include <iostream>
using namespace std;

int main()
{
    int decNumber;
    while (true)
    {
       cout << "Enter the decimal number: ";
       cin >> decNumber;
       // Print hexadecimal with leading zeros
       cout << "Hexadecimal: ";
       for (int i = 2*sizeof(int) - 1; i >= 0; i--)
       {
          cout << "0123456789ABCDEF"[((decNumber >> i*4) & 0xF)];
       }
       cout << endl;
    }
  return 0;
}

Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 03 декабря 2009

Как насчет:

int number = 56;
cout << hex << number;

Вы также можете пройти через stringstream, чтобы получить представление шестнадцатеричной строки:

#include <iostream>
#include <sstream>

int main () {
    int number = 45;
    std::ostringstream os;
    os << std::hex << number;
    std::cout << os.str() << std::endl;
}

И дополнительная информация о потоке строк и fromString / toString: http://cplusplus.co.il/2009/08/16/implementing-tostring-and-fromstring-using-stdstringstream/

2 голосов
/ 03 декабря 2009

Ваш цикл for должен иметь два состояния:

  1. Исходное состояние, которое игнорирует '0' символы, но переключается на следующий состояние не '0 '
  2. Печать каждого символа до конца.

Итак, первое состояние должно проверять каждый символ перед печатью.

1 голос
/ 03 декабря 2009

Вы можете вызывать эту функцию напрямую из C ++, но вам может потребоваться сохранить некоторые регистры, в зависимости от компилятора. Получайте удовольствие от перевода на C ++.

        ;number to convert in [esp+4]
        ;pointer to string in [esp+8]

itoh:   mov edi, [esp+8]   ;pointer to c string
        bsr ecx, eax       ;calculate highest set bit
        and cl, $fc        ;round down to nearest multiple of 4
loop:   mov eax, [esp+4]
        shr eax, cl        ;mov hex digit to lowest 4 bit
        and eax, $f        ;mask hex digit
        cmp eax, 10        ;test if digit is in A..F
        jlt numdgt
        add eax, 'A'-'0'-10 ;it is
numdgt: add eax, '0'       ;ascii converted digit
        mov [edi], al      ;store to string
        inc edi            ;and increment pointer
        sub cl,4           ;decrement loop counter
        jnc loop
        mov byte[edi], 0   ;terminate string
        ret
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...