Отображение hex C-строки (cout << hex << int(char)) C++

191
30 марта 2017, 22:01

Есть функция, которая выводит hex C-строку, может есть более правильный способ?

void outHexByCout(const char * cha, int len)
{
    for (size_t i = 0; i < len; ++i)
    {
        cout  << setw(2) << setfill('0') << hex << static_cast<uShort>(cha[i]) << " ";
    }
    cout << endl;
}

Пример вывода:

00 1f ff80 00 00 00 03 ffac 00 15 5b 30 33 2d 32 38 20 32 31 3a 35 37 3a 31 30 3a 31 30 30 5d 00

Что нужно:

00 1F 80 00 00 00 03 AC 00 15 5B 30 33 2D 32 38 20 32 31 3A 32 31 3A 30 30 3A 31 30 30 5D 00

Почему приписывает ff? Например, вот эту строчку получил

ff80 00 00 00

таким образом:

...
writeSESS(128);
...
        void writeSESS(uint32_t ses)const
        {
            // const char* m_buffer 
            memcpy(const_cast<char*>(m_buffer + 2, (char*)&ses, sizeof(uint32_t)); 
        }
Answer 1

Ваш компилятор в соответствии с установленными опциями рассматривает тип char аналогично типу signed char, поэтому при приведении типов знаковый бит объекта распространяется на старшие биты результирующего выражения.

Сравните.

#include <iostream>
#include <iomanip>
int main() 
{
    char c = '\x80';
    std::cout << std::hex << static_cast<unsigned short>( c )  << std::endl;
    std::cout << std::hex << static_cast<unsigned short>( static_cast<unsigned char>( c ) )  << std::endl;
    return 0;
}

Вывод программы

ff80
80

Вам надо сначала объект типа char преобразовывать в объект типа unsigned char, а лишь затем в тип unsigned short или short

READ ALSO
Qt. Проблемы с QVector&lt;MyClass&gt;

Qt. Проблемы с QVector<MyClass>

Есть класс такого рода:

237
Найти номер первой из строк, не содержащих ни одного положительного элемента [требует правки]

Найти номер первой из строк, не содержащих ни одного положительного элемента [требует правки]

Есть матрица M x N, нужно найти номер первой из строк, не содержащих ни одного положительного элементаСпасибо! Застрял

256
Нужна программа для считывания данных с внешнего сайта [требует правки]

Нужна программа для считывания данных с внешнего сайта [требует правки]

Нужна программа для считывания данных с внешнего сайта с временным обновлением и звуковым оповещением

196
Не работает рандом

Не работает рандом

Создал переменную, сделал её рандомной, выдаёт всегда 5, сколько бы ты не писал startПодскажите пожалуйста, где проблема?

274