Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
11 / 11 / 0
Регистрация: 04.04.2014
Сообщений: 140
1

Нужно чтобы на экран числа выводились в 16-ричном формате

21.08.2014, 11:24. Показов 1288. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В кратце: пишу CAN-месенджер в принципе он работает, но есть одно НО. Мне нужно чтобы на экран числа выводились в 16-ричном формате. Ниже привожу код преобразования:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void can_protocol::ShowOneCanFrame(Can_frame message, int position)
{
    if(ptrII == NULL) return;
    TCHAR buf[50];
    
    _swprintf(buf, _T("%u"), position+1);
    ptrII->message_list.SetItemText(position, 0, buf);
 
    _swprintf(buf, _T("%u:%02u:%02u:%03u"), message.time.wHour, message.time.wMinute, message.time.wSecond, message.time.wMilliseconds);
    ptrII->message_list.SetItemText(position, 3, buf);
    
    _swprintf(buf, _T("%08X"), message.mess.id);
    ptrII->message_list.SetItemText(position, 2, buf);
 
    _swprintf(buf, _T("%u"), message.mess.length);
    ptrII->message_list.SetItemText(position, 4, buf);
 
    std::tcstring str = _T("");
    for(int i = 0; i < 8; i++)
    {
        TCHAR Buf[3];
        _swprintf(Buf, _T("%02X "), message.mess.data[i]);
        str+=Buf;
    }
    ptrII->message_list.SetItemText(position, 6, str.c_str());
 
    ptrII->message_list.SetItemText(position, 1, message.type == RECIEVED_FRAME? _T("RX"):_T("TX"));
    ptrII->message_list.SetItemText(position, 5, _T("EFF"));
}
И скрин:
Нужно чтобы на экран числа выводились в 16-ричном формате


Как это исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.08.2014, 11:24
Ответы с готовыми решениями:

Нужно, чтобы все элементы стека выводились на экран
Исправьте пожалуйста!) Нужно, чтобы все элементы стека выводились на экран. namespace...

Цикл: Нужно сделать так, чтобы на экран выводились звездочки согласно рисунка...
Задача: нужно сделать так, что бы на экран выводились звездочки таким вот рисунком ***** ****...

Нужно, чтобы данные из DataGrid выводились в ReportViewer
Привет всем! Пожалуйста, помогите,с моей проблемой... Мучаюсь уже целый день. Заранее скажу, что...

Нужно, чтобы введенные теги выводились как текст
Есть поле в которое вводят текст. Необходимо сделать так чтобы если в поля вводят теги типа:...

19
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.08.2014, 12:31 2
Две шестнадцатиричные цифры, плюс пробел, плюс завершающий ноль - нужен массив как минимум из четырёх элементов.
0
11 / 11 / 0
Регистрация: 04.04.2014
Сообщений: 140
21.08.2014, 12:33  [ТС] 3
у меня байтовый массив для 8 элементов. разве в один байт нельзя уместить число FF?
Я что то плохо понял, что вы мне сказать хотели
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.08.2014, 12:37 4
21-я строка. В виде текста туда поместиться только 2 символа + ноль в конце. Для пробела места нет.
И ещё я не понял, о какой проблеме идёт речь?
0
11 / 11 / 0
Регистрация: 04.04.2014
Сообщений: 140
21.08.2014, 12:40  [ТС] 5
Проблема такова, что я хочу видеть в поле сообщений числа 0123456789ABCDEF, а в место этого вижу 0123456789 10 11 12 и т.д.

Добавлено через 50 секунд
А по поводу пробела: на скрине в поле "посылка" пробел пробел присутсвует
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.08.2014, 12:45 6
А я не вижу чисел 10, 11 и 12. Подставь вместо message.mess.data[i] число 10. Что получится?
По поводу размера массива я тебя предупредил. Это будет работать до поры до времени.
0
11 / 11 / 0
Регистрация: 04.04.2014
Сообщений: 140
21.08.2014, 12:55  [ТС] 7
Нужно чтобы на экран числа выводились в 16-ричном формате

На своем компе я замкнул два CAN-порта, и общаюсь между ними. Одним приложением отправляю сообщение, другим принимаю. По поводу того что вы не видите чисел, так вот отправляется то, что внизу я укажу.
Размер буфера поправил...
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.08.2014, 12:58 8
Хорошо. Структура Can_frame как выглядит? Как заполняется массив data?
0
11 / 11 / 0
Регистрация: 04.04.2014
Сообщений: 140
21.08.2014, 13:00  [ТС] 9
Подставил вместо message.mess.data[i], увидел число 0А. Теперь можете мне объяснить, почему когда я беру число и эдита, оно остается таким же, а когда я его в коде явно указываю, то оно конвертируется в 16ричное?

Добавлено через 1 минуту
Структура Can_frame:
C++
1
2
3
4
5
6
7
8
9
10
struct Can_frame
{
    canmsg_t mess;
    SYSTEMTIME time; 
    TYPE_CAN_FRAME type;
    
    Z::Result recieve_from(Z::Stream& input); 
    Z::Result send_to(Z::Stream& output) const;
    void ShowSelf();
};
Здесь я собираю всю информацию, введенную в контролах:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
void can_protocol::GetCtrlData()
{
    if(ptrII == NULL) return;
    if(ctrl_access == false) return;
    TCHAR str1[9];
    BYTE tempdatamsg[8];
    
    ptrII->data1.GetWindowTextW(str1, 8);
    int msg1;
    Radix radix(_T("0123456789ABCDEF"));
    radix.add_equiv_seq(_T("0123456789abcdef"));
    msg1 = str2uint(str1, radix);
    tempdatamsg[0] = msg1;
 
    ptrII->data2.GetWindowTextW(str1, 8);
    int msg2;
    msg2 = str2uint(str1, radix);
    tempdatamsg[1] = msg2;
 
    ptrII->data3.GetWindowTextW(str1, 8);
    int msg3;
    msg3 = str2uint(str1, radix);
    tempdatamsg[2] = msg3;
 
    ptrII->data4.GetWindowTextW(str1, 8);
    int msg4;
    msg4 = str2uint(str1, radix);
    tempdatamsg[3] = msg4;
 
    ptrII->data5.GetWindowTextW(str1, 8);
    int msg5;
    msg5 = str2uint(str1, radix);
    tempdatamsg[4] = msg5;
 
    ptrII->data6.GetWindowTextW(str1, 8);
    int msg6;
    msg6 = str2uint(str1, radix);
    tempdatamsg[5] = msg6;
 
    ptrII->data7.GetWindowTextW(str1, 8);
    int msg7;
    msg7 = str2uint(str1, radix);
    tempdatamsg[6] = msg7;
 
    ptrII->data8.GetWindowTextW(str1, 8);
    int msg8;
    msg8 = str2uint(str1, radix);
    tempdatamsg[7] = msg8;
 
    ptrII->id_can_mess.GetWindowTextW(str1, 8);
    int ID;
    ID = str2uint(str1, radix);
 
    ptrII->length_can_mess.GetWindowTextW(str1, 8);
    int LENGTH;
    LENGTH = _wtoi(str1);
    
    if(LENGTH > 8) 
    {
        LENGTH = 8;
        ptrII->length_can_mess.SetWindowTextW(_T("8"));
    }
 
    CString str("SFF");
    ptrII->flag_can_mess.GetWindowTextW(str1, 5);
    int SendFlag = 0;
    CString STR1(str1);
    if (str == STR1)
    {
        SendFlag = 0;
    }
    else
    {
        SendFlag = 1<<2;
    }
    
    for(int i = 0; i < LENGTH; i++)
    {
        tx_msg_frame.mess.data[i] = tempdatamsg[i];
    }
 
    ptrII->time_cycle.GetWindowTextW(str1, 8);
    cycle_delay = _wtoi(str1);
 
    tx_msg_frame.mess.flags = SendFlag;
    tx_msg_frame.mess.id = ID;
    tx_msg_frame.mess.length = LENGTH;
 
}
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.08.2014, 13:02 10
canmsg_t можно увидеть?
0
11 / 11 / 0
Регистрация: 04.04.2014
Сообщений: 140
21.08.2014, 13:04  [ТС] 11
C++
1
2
3
4
5
6
7
typedef struct {
        int                     flags;                  /* Flags, indicating or controlling special message properties */
        int                     cob;                    /* CAN object number, used in Full CAN */
        ULONG                   id;                     /* CAN message ID, 4 bytes  */
        short int               length;                 /* Number of bytes in the CAN message */
        UCHAR                   data[DATALENGTH];       /* Data, 0...8 bytes */
} canmsg_t;
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.08.2014, 13:04 12
Всё понятно. Из полей ты их считываешь как 16-ныне числа, как и выводишь.
0
11 / 11 / 0
Регистрация: 04.04.2014
Сообщений: 140
21.08.2014, 13:06  [ТС] 13
Что то до меня все еще не дошло...
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.08.2014, 13:10 14
Я не знаю что у тебя за компилятор и что такое Radix, но могу предположить что должно быть так:
C++
1
Radix radix( _T( "0123456789 ));
0
11 / 11 / 0
Регистрация: 04.04.2014
Сообщений: 140
21.08.2014, 13:30  [ТС] 15
Компилятор VS05, класс Radix достался мне от моего наставника, она конвертирует строку в тот формат который я укажу. Те исправления, которые вы внесли юудут конвертировать в 10-ричный формат. Если убрать "9" и "8", получится 8-ричный формат
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.08.2014, 13:36 16
Если это вопрос, то да.
0
11 / 11 / 0
Регистрация: 04.04.2014
Сообщений: 140
21.08.2014, 13:42  [ТС] 17
Нет, это утверждение. Вопрос в моем последнем посте не было.
Остается открытым вопрос, почему при явном указании в коде числа 10 я вижу в списке 0А, а при взятии этой же десятки из эдита она в списке остается десяткой

Добавлено через 4 минуты
Цитата Сообщение от castaway Посмотреть сообщение
могу предположить что должно быть так:
попробовал - не помогло
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.08.2014, 13:43 18
Потому что это не десятка, а 0x10, т.е. 16. Ты их вводишь как шеснадцатиричные, вне десятичные, что тут трудно понять?

Добавлено через 55 секунд
Покажи как пробовал.
1
11 / 11 / 0
Регистрация: 04.04.2014
Сообщений: 140
21.08.2014, 13:48  [ТС] 19
Т.е когда я ввожу в эдит "10" на самом деле я ввожу 0х10?
Мдаа, что сегодня мозг со мной не дружит...
У меня так: если я в эдит введу "А", в списке я увижу "0А". Т.е. мой эдит воспринимает 16ричные числа. Соответсвенно когда я ввожу "10" он в 10тичном формате воспримит ее как 16, но так как я прошу его выводить мне в 16ричной, то он и выводит ту же десятку, верно?

Добавлено через 2 минуты
Все, я разобрался. Спасибо castaway!!!
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
21.08.2014, 13:49 20
Да.
0
21.08.2014, 13:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.08.2014, 13:49
Помогаю со студенческими работами здесь

Нужно чтобы цифры не выводились в консоль, как это реализовать?
program Project1; {$APPTYPE CONSOLE} uses SysUtils, Windows; type //Сведения о...

Нужно чтобы заголовки столбцов выводились не как переменные, а по-другому
Проблема такая. В MySQL заголовки стобцов имеют названия типа dissolved_oxygen, а нужно чтобы было...

Нужно сделать этикетку через запрос, чтобы выводились определенные данные
Доброе утро. нужно что бы выводились этикетки без повторения. то есть в запросе есть столбец...

Нужно чтобы выводились результаты группировки даже если условие не соблюдено
Есть таблица Accounts, имена которых нужно вывести в любом случае даже если нет данных в базе или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru