Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2021, 21:38   #11
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Почитайте на досуге про порядок байтов.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.06.2021, 22:37   #12
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

Я теперь думаю: при переводе строки в число, оно получается перевернутым

И вот вопрос: как тогда лучше: переворачивать обратно, или нет
Kronos913 вне форума Ответить с цитированием
Старый 08.06.2021, 23:16   #13
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
А так не пойдет?
Код:
uses StrUtils;
...
case AnsiIndexStr(AnsiUpperCase(RightStr(s, 4)), ['.JPG', '.BMP']) of
  0: ShowMessage('jpg');
  1: ShowMessage('bmp');
end;
А теперь у меня еще один вопрос к этому коду:
Код:
['.JPG', '.BMP']
- какого типа вот эта вещь?
Учитывая ее применение минимум в двух местах, хотел бы записать ее как константу
Kronos913 вне форума Ответить с цитированием
Старый 08.06.2021, 23:34   #14
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
лучше: переворачивать обратно, или нет
Если использовать только для выбора действий в кейсе, то, по-моему, всё равно. Только добавить константы, чтобы код был понятнее:
Код:
const
  JPGType = $47504A2E;
  BMPType = $504D422E;
...
  case StrToLongWord(s) of
    JPGType: ShowMessage('jpg');
    BMPType: ShowMessage('bmp');
  end;
Цитата:
Сообщение от Kronos913 Посмотреть сообщение
хотел бы записать ее как константу
Можно так:
Код:
const
  file_types: array[0..1] of string = ('.JPG', '.BMP');
...
  case AnsiIndexStr(AnsiUpperCase(RightStr(s, 4)), file_types) of
    0: ShowMessage('jpg');
    1: ShowMessage('bmp');
  end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.06.2021, 00:32   #15
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

Я вот сейчас задумался, какой из вариантов кода лучше...

С одной стороны, через конвертирование в longWord более запутанно
И учитывая что там идет обращения к памяти - нет уверенности, что будет все норм работать на другом компе

А AnsiIndexStr - получается двойная проверка условий... В смысле сначала AnsiIndexStr проверяет что за строка, а потом кейс заново проверяет ее результат...

На счет "другого компа" - я замечал, что напрмер таймеры работают по разному на 10ке и на ХР
Kronos913 вне форума Ответить с цитированием
Старый 09.06.2021, 01:01   #16
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

И в конце концов выигрывает цепочка if`ов
Код:
ext := AnsiUpperCase(ExtractFileExt(s));
if ext = '.BMP' then
    ShowMessage('bmp')
else if ext = '.JPG' then
    ShowMessage('jpg')
else
    ShowMessage('Unknown type ' + ext)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 09.06.2021 в 01:03.
BDA вне форума Ответить с цитированием
Старый 01.07.2021, 14:17   #17
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

А вот теперь у меня вопрос, можно ли через asm сделать этот код еще оптимальнее?
Kronos913 вне форума Ответить с цитированием
Старый 02.07.2021, 12:17   #18
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
можно ли через asm сделать этот код еще оптимальнее?
Остается только спросить - для чего? чтобы что?

Во-первых, asm не гарантирует скорость. Во-вторых, есть смысл пытаться оптимизировать только высоконагруженный код.

Самые частые ошибки начинающих это - попытки преждевременной оптимизации, бессмысленной оптимизации и попытки оптимизировать код, который изначально не является лучшим решением.

Какая задача решается?
Код из первого сообщения понятен, но смысл этих действий от меня ускользает. Код из последнего сообщения оптимален по сути.
x128 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C#] Найти сумму длин самой короткой и первой строк. Pupil1 Помощь студентам 0 19.06.2019 20:45
В каждой строке вибираеться минимальное число, а затем среди этих чисел вибираеться максимально. Вивести на экран номер строки в котором находится это число. Анастасия3006 Помощь студентам 1 26.12.2016 01:20
Ввести число N. Вывести N строк с номером строки, двоеточием и набором чисел от 1 до N+1-k (где k-номер строки) ( в С ) Eduard12345 Помощь студентам 1 11.10.2013 07:25
подсчитать количество символов в самой короткой группе, в строке, состоящей из групп нулей и единиц misher Помощь студентам 6 22.10.2012 09:53
В матрице найти число положительных элементов указанной строки и умножить это число на элементы указанного столбца. (Паскаль) Julichka1k Помощь студентам 4 18.12.2011 20:35