Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
1. это 51, ресурсов не так много, чтобы создавать без надобности строки, вызывать ненужные функции и т.д.
2. я делал (без itoa!) так:
х = *((DWORD*)("1234"));
но в этом случае код на два десятка байт больше, чем при
х = 0x31323334UL;
в первом случае строка располагается в памяти, а при вызове х = *((DWORD*)("1234")) берется указатель на эту строку, и оттуда происходит копирование. Во втором случае прямо в регистры грузятся константы
3. Мне строка нужна не произвольной длины, а точно 4 символа, и эти символы упакованы в DWORD
4. Запись "в лоб" типа х = 0x31323334UL мягко говоря, не отличается наглядностью
5. Сейчас пользуюсь макросом
#define CHAR2DWORD(a,b,c,d) ((((DWORD)(BYTE)(a))<<24UL)|((DWORD)(BYTE)(b)<<16UL)|((DWORD)(BYTE)(c)<<8UL)|((DWORD)(BYTE)(d)))
он дает нужный результат, но его использование тоже не слишком удобно - нужно писать так:
х = CHAR2DWORD('В', 'х', '1', ' ');
Хочу макрос, чтобы его использование выглядело так:
х = CHAR2DWORD("Вх1 ");
или так
х = CHAR2DWORD(Вх1 );
Составить ответ | Вернуться на конференцию
Ответы