Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
Страниц: 1 2 3 [4] 5 6 7 ... 10
 31 
 : 04-02-2024 07:33 
Автор Boriska - Последний ответ от Boriska
вот я и попытался съэкономить
Код:
code_page_ru['А'] = 'A';					//'А'0x90
code_page_ru['Б'] = (char)160;
если русский символ есть я подставляю его, если его нет беру значение из знакогенератора индикатора.
потом глядь, а  'A' двухбайтовый

сейчас это выглядит вот так, все работает но осадочек остался
Код:
char _code_page_ru[256] = {
   
    [' ' & 0x00FF] = ' ',
    ['.' & 0x00FF] = '.',
    ['=' & 0x00FF] = '=',
    ['+' & 0x00FF] = '+',
    ['-' & 0x00FF] = '-',
    [':' & 0x00FF] = ':',
    [';' & 0x00FF] = ';',
    ['[' & 0x00FF] = '[',
    [']' & 0x00FF] = ']',
    ['(' & 0x00FF] = '(',
    [')' & 0x00FF] = ')',
    ['%' & 0x00FF] = '%',
    ['@' & 0x00FF] = '@',
    ['*' & 0x00FF] = '*',
    ['/' & 0x00FF] = '/',
    ['\\' & 0x00FF] = '\\',
    ['|' & 0x00FF] = '|',
    ['?' & 0x00FF] = '?',
    ['<' & 0x00FF] = '<',
    ['>' & 0x00FF] = '>',
   
['А' & 0x00FF] = 'A',                   //'А'0x90
['Б' & 0x00FF] = (char)160,             //'Б'
['В' & 0x00FF] = 'B', //'В'
['Г' & 0x00FF] = (char)161, //'Г'
['Д' & 0x00FF] = (char)224, //'Д'
['Е' & 0x00FF] = 'E', //'Е'
['Ж' & 0x00FF] = (char)163, //'Ж'
['З' & 0x00FF] = (char)164, //'З'

 32 
 : 03-02-2024 23:44 
Автор Boriska - Последний ответ от RXL
Т.е. нужны константы и строки в 8-битной кодировке, совместимой с используемым шрифтом.

С константами все просто:
Код: (C)
enum { // cp866
    char_ru_A  = 0x80,
    char_ru_B = 0x81,
    // ...
};

code_page_ru[char_ru_A] = ...;

Строки нужно перекодировать перед компиляцией. Например, объявить строки extern и поместить в один модуль не .c, а с каким-то другим расширением, напр. .cstr, и прописать для него в Makefile правила сборки, где будет создан файл .c в нужной кодировке.

 33 
 : 03-02-2024 21:11 
Автор Boriska - Последний ответ от Boriska
Хорошо бы. Но это не VS и не для ОС. Это STM32CubeIDE для микроконтроллеров STM32. Там вроде С есть и даже C++ а эта страница заполнялась для индикации на ЖК индикаторе двухстрочном. Там wchar небывает Улыбаюсь

 34 
 : 03-02-2024 15:03 
Автор Boriska - Последний ответ от RXL
Есть такой wchar...

 35 
 : 03-02-2024 05:06 
Автор Boriska - Последний ответ от Boriska
Дело было так. В STM32CubeIDE заполнял таблицу
Код:
void init_ru_code_page()
{
code_page_ru['А'] = 'A'; //'А'0x90
code_page_ru['Б'] = (char)160; //'Б' 0x91
code_page_ru['В'] = 'B'; //'В'0x92
code_page_ru['Г'] = (char)161; //'Г'0x93
code_page_ru['Д'] = (char)224; //'Д'
code_page_ru['Е'] = 'E'; //'Е'
code_page_ru['Ё'] = (char)162; //'Ё'
code_page_ru['Ж'] = (char)163; //'Ж'
Обнаружил что символ в таблице занимал два байта. Пока не поставил в свойствах проекта -fexec-charset=866 так и было.
Может еще надо какая инфа, я откачу и предоставлю.

 36 
 : 03-02-2024 04:52 
Автор Boriska - Последний ответ от Алексей++
Boriska, CHAR_BIT - это размер байта в битах (чаще всего это 8, но на каких-то компиляторах/платформах может быть и другое значение).
sizeof возвращает размер в байтах
https://en.cppreference.com/w/cpp/language/sizeof

размер int не зависит от битности чего-либо. В стандарте размеры прописаны так:

char / unsigned char / signed char - имеют размер один байт
остальные целочисленные типы:
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

 37 
 : 02-02-2024 21:29 
Автор Boriska - Последний ответ от Джон
Писал под контроллер и вдруг обнаружил, что char это не 8 а 16. В студии кодировка двухбайтовая вот и пожалуйста.

Можно подробней? Что значит кодировка "двухбайтовая"? Что значит 8 и 16?

Почему спрашиваю:

 sizeof(char) = 1

другого не видел.

 38 
 : 02-02-2024 18:18 
Автор Boriska - Последний ответ от Boriska
Вы не совсем правильно меня поняли. sizeof это аксиома никто не отменял. Вот у меня есть студия для контроллера МикроЧип. А сам контроллер отсутствует в данный момент. Да я могу подождать, прийдет контроллер и я запущу sizeof и посмотрю. Меня интересует могу ли я, зная что он 16 битный определить размеры int. Ведь зависит же размер int от разрядности процессора в ПК. На ПК если ОС 32 и проц 32 то и инт будет 4. Если ОС 32, проц 64 int будет 4, если ОС64, проц 64 тогда int будет 8. Вот и пытаюсь связать размер слова микроконтроллера с размером int без sizeof

 39 
 : 02-02-2024 16:37 
Автор Boriska - Последний ответ от Алексей++
Boriska, привет. Количество битов в типе char лежит в константе CHAR_BIT
для C https://en.cppreference.com/w/c/types/limits
для C++ https://en.cppreference.com/w/cpp/types/climits

>>Как нынче определять размер типа без sizeof
размер типа определяется нынче именно при помощи sizeof Улыбаюсь

 40 
 : 02-02-2024 16:30 
Автор Boriska - Последний ответ от Boriska
Привет. Писал под контроллер и вдруг обнаружил, что char это не 8 а 16. В студии кодировка двухбайтовая вот и пожалуйста. В связи с этим вопрос о типах. Как нынче определять размер типа без sizeof. Вот допустим char будет зависеть не от контроллера или ПК, а от студии. А допустим int. По идее от платформы ?

Страниц: 1 2 3 [4] 5 6 7 ... 10
Powered by SMF 1.1.21 | SMF © 2015, Simple Machines