@Sechih

Как вывести в DataGridView число в шестнадцатеричном формате?

Добрый день, я только начинающий писать на C#, написал приложку которая общается с STM32 по USB-СDC, по сути CAN - Sniffer, считывает строку, переводит в hex, сортирует по Id и сохраняет в класс (сразу хотел сохранять в структуру, но не вышло из-за доступа и инициализации полей структуры в потоке, они обнулялись)
class CAN_RX_Class
        {   static public uint[] Id = new uint[max_message];
            static public byte[] DLC = new byte[max_message];
            static public byte[] Byte0 = new byte[max_message];
            static public byte[] Byte1 = new byte[max_message];
            static public byte[] Byte2 = new byte[max_message];
            static public byte[] Byte3 = new byte[max_message];
            static public byte[] Byte4 = new byte[max_message];
            static public byte[] Byte5 = new byte[max_message];
            static public byte[] Byte6 = new byte[max_message];
            static public byte[] Byte7 = new byte[max_message];
            static public ushort[] CAN_count = new ushort[max_message];
            static public ushort number_last_string;
            static public ushort current_line_number = 0;
        }

Считываю буфер и раскладываю по полочкам класса числа
uint ID_array = 0;
            for (byte j = 5, offset = 28; j <= 12; j++, offset -= 4)
                ID_array += (uint)((_bufer[j].MyAsciiToHex()) << offset);
              
  if (CAN_RX_Class.number_last_string == 0)
                {
                    //формируем ID
                    CAN_RX_Class.Id[i] = ID_array;
                    //Формируем DLC
                    CAN_RX_Class.DLC[i] = _bufer[13].MyAsciiToHex();
                    //Формируем BYTS
                    CAN_RX_Class.Byte0[0] = (byte)(((_bufer[14].MyAsciiToHex()) << 4) + (_bufer[15].MyAsciiToHex()));

В дебаге видно как все числа ложатся правильно в класс и формируют полное сообщение, теперь хочу вывести все поля массивов класса (числа) в DataGridView
Добавляю нужное количество строк и в них хочу каждый раз обновлять данные в режиме realtime, думаю сейчас как это сделать оптимальнее, на костылях выводил.
Неудобно сделано что нужно каждый раз добавлять строку, но думаю получится сделать так, если есть новый Id в классе, под него создаем новую строку, нет, обновляем уже созданную.
//добавляем пустые строки >>
            for (; CAN_RX_Class.current_line_number <= CAN_RX_Class.number_last_string; ++CAN_RX_Class.current_line_number)
                Invoke(new Action(() =>
                {
                    dataGrid_CAN1.Rows[dataGrid_CAN1.Rows.Add()].Cells[0].Value = CAN_RX_Class.current_line_number + 1;
                }));
            //<<

При выводе число в поле выводится в десятичном формате, как сделать так чтобы оно выводилось в шестнадцатеричном виде, писать нужно метод или есть какая-то готовая реализация?
Конечно если я бы сортировку по Id делал в массиве типа string а не ushort и сравнивал строки Id, а не "реальные числа", тогда было бы без проблем вывести FF-ки в GridView.
Нужно вывести в таком формате, а выводит в десятичном
6176f634ef09f234898326.jpeg
  • Вопрос задан
  • 46 просмотров
Решения вопроса 1
@Sechih Автор вопроса
Вот так решил проблему расширением
public static string MyConvertToHEX(this int mean) => (Convert.ToString(mean, 16));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы