Есть функция, которая выводит 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));
}
Ваш компилятор в соответствии с установленными опциями рассматривает тип 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
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть матрица M x N, нужно найти номер первой из строк, не содержащих ни одного положительного элементаСпасибо! Застрял
Нужна программа для считывания данных с внешнего сайта с временным обновлением и звуковым оповещением
Создал переменную, сделал её рандомной, выдаёт всегда 5, сколько бы ты не писал startПодскажите пожалуйста, где проблема?