Здравствуйте, r1der, Вы писали:
R>есть функций printinhex которая принимает десятичное число, далее с помощью побитовых операций должна разложить видимо на тетрады и вывести в шестнадцатиричном формате..интересует эта функция.. а точнее как она работает в объекте cout
Зачем тетрады-шметрады. Обычная функция itoa(int value, char* buf, int radix), работает следующим способом
char* itoa(int value, char* buf, int radix)
{
char const* const digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char* end = buf;
bool const sign = (value<0);
value = abs(value);
if(value == 0) // особый случай: нулю соответствует не пустая строка, а "0"
*(end++) = digit[0];
// раскладываем число на цифры (младшими разрядами вперёд)
while(value != 0)
{
*(end++) = digit[value%radix];
value /= radix;
}
if(sign) // дописываем после старшего разряда знак
*(end++) = '-';
*end = 0; // и дописываем концевой ноль
// к этому моменту мы получили строку младшими разрядами вперёд
// обращаем её
strrev(buf);
return buf;
}
Для случая radix=16 можно специализировать, заменив % и / на & и >>
Для случая фиксированной ширины (когда надо вывести и ведущие нули) — можно развернуть цикл
char* ultoh(unsigned value, char* buf)
{
char const* const digits = "0123456789ABCDEF";
buf[0] = digits[(value>>28)&15];
buf[1] = digits[(value>>24)&15];
buf[2] = digits[(value>>20)&15];
buf[3] = digits[(value>>16)&15];
buf[4] = digits[(value>>12)&15];
buf[5] = digits[(value>> 8)&15];
buf[6] = digits[(value>> 4)&15];
buf[7] = digits[(value>> 0)&15];
buf[8] = 0;
return buf;
}
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>