Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
takhvatulin
11 / 11 / 0
Регистрация: 04.04.2014
Сообщений: 140
#1

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

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

В кратце: пишу 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2014, 11:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужно чтобы на экран числа выводились в 16-ричном формате (C++):

Вывести в консоль в виде таблицы значения чисел в 16 и 10-ричном формате - C++
Обьясните пожалуйста задание, и как его можно реализовать, выучили указатели. Задание:–виведення на консоль у вигляді таблиці значень...

Как зделать чтобы при открытии программы выводились разные числа - C++
Помогите пожалуйста. вобщем обьясните вот на таком примере #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int...

Представление числа в 16-ричном виде - C++
Как это звучит на русском? e=C%16; d=C/16; HEX_A=array_m+HEX_A; C=d;

Нужно чтобы случайные числа вставали в конец массива,а не удаляли числа - C++
#include &lt;iostream&gt; using namespace std; void main() { setlocale(LC_ALL, &quot;Russian&quot;); int n; // кол-во элементов массива ...

Как сделать,чтобы предложения выводились на русском - C++
Нужно написать программу, которая считывает текст из файла и выводит на экран сначала предложения, начинающиеся с однобуквенных слов, а...

Работа со строками ( сделать так, чтобы введенные символы с пробелом выводились в виде идентификаторов) - C++
Здравствуйте! Столкнулась с такой проблемой: Не получается сделать так, чтобы введеные символы с пробелом выводились в виде...

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

Добавлено через 50 секунд
А по поводу пробела: на скрине в поле "посылка" пробел пробел присутсвует
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
21.08.2014, 12:45 #6
А я не вижу чисел 10, 11 и 12. Подставь вместо message.mess.data[i] число 10. Что получится?
По поводу размера массива я тебя предупредил. Это будет работать до поры до времени.
0
takhvatulin
11 / 11 / 0
Регистрация: 04.04.2014
Сообщений: 140
21.08.2014, 12:55  [ТС] #7
Нужно чтобы на экран числа выводились в 16-ричном формате
На своем компе я замкнул два CAN-порта, и общаюсь между ними. Одним приложением отправляю сообщение, другим принимаю. По поводу того что вы не видите чисел, так вот отправляется то, что внизу я укажу.
Размер буфера поправил...
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
21.08.2014, 12:58 #8
Хорошо. Структура Can_frame как выглядит? Как заполняется массив data?
0
takhvatulin
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
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
21.08.2014, 13:02 #10
canmsg_t можно увидеть?
0
takhvatulin
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
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
21.08.2014, 13:04 #12
Всё понятно. Из полей ты их считываешь как 16-ныне числа, как и выводишь.
0
takhvatulin
11 / 11 / 0
Регистрация: 04.04.2014
Сообщений: 140
21.08.2014, 13:06  [ТС] #13
Что то до меня все еще не дошло...
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
21.08.2014, 13:10 #14
Я не знаю что у тебя за компилятор и что такое Radix, но могу предположить что должно быть так:
C++
1
Radix radix( _T( "0123456789 ));
0
takhvatulin
11 / 11 / 0
Регистрация: 04.04.2014
Сообщений: 140
21.08.2014, 13:30  [ТС] #15
Компилятор VS05, класс Radix достался мне от моего наставника, она конвертирует строку в тот формат который я укажу. Те исправления, которые вы внесли юудут конвертировать в 10-ричный формат. Если убрать "9" и "8", получится 8-ричный формат
0
21.08.2014, 13:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2014, 13:30
Привет! Вот еще темы с ответами:

Как сделать так чтобы считывался пробел и не выводились несколько раз повторенные символы - C++
Как сделать так чтобы считывался пробел и не выводились несколько раз повторенные символы Вот код программы: #include&lt;string.h&gt; ...

Подскажите как сделать чтобы эти дроби не выводились, а записались в массив str1[100] - C++
Подскажите как сделать чтобы эти дроби не выводились, а записались в массив str1 char str1; for (int i = 0; i &lt; 10; i++) { if...

Как сделать чтобы в постфиксной записи кроме цифр выводились еще и обычные символы - C++
Есть код который делает конвертацию например 1 + 2 * 3 --&gt;123*+ но а + b* c --&gt;с -- то есть лиш последний введеный символ что здесь не...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.