![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Вот, написал такой код
А выводит он сущую фигню. Помогите плиз найти ошибку -------------------- Обижено школьников: 8 |
|||
|
||||
| Coder |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 5 Всего: 11 |
Я не разбирался с твоим кодом но САБЖ можно сделать так:
b - байт
в результате в al - младшие 4 байта, в ah - старшие можно и без ассемблера обойтись:
Это сообщение отредактировал(а) Coder - 30.5.2006, 04:06 |
||||
|
|||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
|
||||
|
|||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 5 Всего: 11 |
Snowy, че-то ты намудрил.
надо так:
если во втором случае сразу применить shl и shr то ВСЕ биты вернуться на свои места и при этом старшие не обратятся в нули |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
-------------------- |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Угу. Заметил - при выполнении операций, байт превращается в 4, потому и не получается.
Но лечится легко:
|
|||
|
||||
| Coder |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: 5 Всего: 11 |
Демо, не пому чем твой пример отличается от моего в первом ответе? в одну строку операторы and и shr не объединил что ли?
|
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Отличается именно этим. Пока досмотрел, про твой код и забыл. Тебя что, задевает? -------------------- |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Тогда так будет самый оптимальный способ:
|
|||
|
||||
| Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
Только не нужно это делать литералами прямо в коде! Просто Delphi имеет глупую привычку заменять иногда при вычислении литералов shr на sar. --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
негде сейчас посмотреть, sar это что? -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| bems |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Спасибо, ребята, но это все и так понятно.
вот в этой моей строчке примерно то же самое и делаю char('a'+bytes[i] shr 4)+' '+char('a'+bytes[i] mod 240) но второй символ выходит за пределы латинского алфавита, а значить что bytes[i] mod 240 больше 16, чего быть не может. Может с этим absolute чего не так? или я уже не знаю... Взгляните плиз на мой код, там не так уж много...
Добавлено @ 10:25
-------------------- Обижено школьников: 8 |
||||
|
|||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
||||
|
||||
| ShadeSt |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 9.8.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 7 |
Может я чего то не понимаю, но
64 бита, это вроде всего 8мь байт (получается, что последние 8мь байт в массиве - "неопределены"??). а вот еще:
а с SYSTEMTIME все должно быть просто:
Это по поводу того, как можно получить время, потом с помощью Format привести к нужному виду и потом добавить в memo. Может так проще будет, или инересен сам алгоритм получения строки из FileTime? По поводу того, что выводит функция:
тут два символа и пять пробелов ( во втором случае их четыре), итого получится строка из 7*16=112 символов. что делает этот код для меня, честно говоря загадка. а как получить тетрады из байта, вроде уже написали. -------------------- It's nice to be importand, but it's more importand to be nice © Scooter |
||||||||
|
|||||||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
||||
|
||||
| bems |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Нужны байты FILETIME
Именно так. попытаюсь прояснить.
цель получить строку латинских букв -------------------- Обижено школьников: 8 |
||||||
|
|||||||
| ShadeSt |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 9.8.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 7 |
восемь байт с 9го по 16й. Это сообщение отредактировал(а) ShadeSt - 30.5.2006, 14:31 -------------------- It's nice to be importand, but it's more importand to be nice © Scooter |
||||
|
|||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
||||
|
||||
| ShadeSt |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 9.8.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 7 |
Дело в том, что ошибка в этой строке:
например: 50 Mod 240 = 50, т.к. остаток от деления равен пятидесяти, попробуй написать так, как советовали выше, например так:
-------------------- It's nice to be importand, but it's more importand to be nice © Scooter |
||||
|
|||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Mod 240 - это вариант, когда я уже отчаился. Тут еще раз прогнал, это понятно. Как советовали выше (and $0F), сделал и заработало, спасибо.
Волнует вот что. До этого было ((bytes[i] shl 4 ) shr 4) и не работало, хотя по логике вещей должно, и выше писали то же самое. Кто-нить может это объяснить? -------------------- Обижено школьников: 8 |
|||
|
||||
| ShadeSt |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 9.8.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 7 |
ИМХО при выполнении
дельфи, по всей видимости приводит результат операции (bytes[i] shl 4) к типу Integer, и поэтому получается , что результат не меняется. можно делать так:
для явного приведения типа, либо так:
для того, что бы вылезти за границу Integer'а -------------------- It's nice to be importand, but it's more importand to be nice © Scooter |
||||||
|
|||||||
| ShadeSt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 9.8.2005 Где: Россия, г. Ставро поль Репутация: нет Всего: 7 |
Вот. я нашел, я просто разул глаза и посмотрел справку:
т.е. тут операнды сразу приводятся к типу Integer, поэтому такое, на первый взгляд странное поведение. -------------------- It's nice to be importand, but it's more importand to be nice © Scooter |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
спасибочки
-------------------- Обижено школьников: 8 |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
А если сделать просто:
Как я понимаю в ah хранятся старшие 4 бита, а в al - младшие. Просто их кинуть в переменные, да и всё тут ) Если не правильно, поясните. -------------------- Ll 2 |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Guedda
Нужно получить именно эти bh и bl, на сколько я понимаю |
|||
|
||||
| Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
sar - почти тот же shr, только с сохранением старшего бита (арифметический сдвиг), для корректной работы с отрицательными значениями. Так вот, если написать
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 14 Всего: 78 |
Получится 3. -------------------- Ll 2 |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Нека, -4
Это сообщение отредактировал(а) Yanis - 31.5.2006, 16:56 |
|||
|
||||
| Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
Точно, -4..
11111111111111111111111111111001 = -7 По идее, должно быть 01111111111111111111111111111100 = 2147483644 но имеем 11111111111111111111111111111100 = -4 Но если сделаем
Тогда все считается кардинально наоборот! --------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Да. Странно, что в первом случае считается некорректно.
Это сообщение отредактировал(а) Yanis - 1.6.2006, 11:26 |
|||
|
||||
| Mechanic |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 5.5.2006 Где: Kharkov, Ukraine Репутация: 6 Всего: 7 |
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are.. ©Mch |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |