Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

С -> D   Найти похожие ветки 

 
Сергей М. ©   (2006-10-12 15:47) [0]

Имеется С-код:


DWORD p = SomePointer1;
DWORD q = SomePointer2;
...
if (*(DWORD *)(p) != *(DWORD *)(q) || *(DWORD *)(p+4) != *(DWORD *)(q+4)) {...


Транслирую его в D-код нижеслед.образом:


type
 HL_DATABLOCK = Int64;
 PHL_DATABLOCK = ^HL_DATABLOCK;
...
var  
 p, q: PHL_DATABLOCK;
...
 p := SomePointer1;
 q := SomePointer2;
..
 if p^ <> q^ then ...


Прав ли я в дан.случае ?


 
[wl] ©   (2006-10-12 15:51) [1]

мне кажется, должно быть так:
if (p[0]<>q[0])or(p[1]<>q[1]) then


 
[wl] ©   (2006-10-12 15:53) [2]

ой, стормозил, тип int64, тогда:
if (p[0]<>q[0]) then


 
default ©   (2006-10-12 15:54) [3]

а разве могут быть сомнения?
только SomePointer-ы в первом варианте типа DWORD, а у тебя они типа укащатель


 
Сергей М. ©   (2006-10-12 15:54) [4]


> [wl] ©   (12.10.06 15:51) [1]


Ты вник в D-декларацию p и q ? Это же не массивы ..


 
Сергей М. ©   (2006-10-12 15:56) [5]


> default ©   (12.10.06 15:54) [3]
> разве могут быть сомнения?


У меня могут)

Смысл идиотских С-выкрутасов а-ля *(DWORD *)(p) забываются с годами работы искл-но в D


 
[wl] ©   (2006-10-12 15:57) [6]

да, точно... давно делфи не занимался (с++ только в основном), забыл уже все


 
default ©   (2006-10-12 15:57) [7]

Сергей М. ©   (12.10.06 15:56) [5]
по-моему всё более чем прозрачно


 
default ©   (2006-10-12 15:58) [8]


> Смысл идиотских С-выкрутасов а-ля *(DWORD *)(p)

в Delphi тоже подобное можно делать, поэтому в сторону C плевать тут не стоит


 
Сергей М. ©   (2006-10-12 16:01) [9]


> default ©   (12.10.06 15:58) [8]


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


 
default ©   (2006-10-12 16:02) [10]

"DWORD p = SomePointer1;
DWORD q = SomePointer2;
...
if (*(DWORD *)(p) != *(DWORD *)(q) || *(DWORD *)(p+4) != *(DWORD *)(q+4)) {..." -->
....
var
p, q: DWORD;
begin
....
p := SomePointer1;
q := SomePointer2;
...
if PInt64(p)^ <> PInt64(q)^ then begin

вот аналог примерный


 
Сергей М. ©   (2006-10-12 16:04) [11]


> default ©   (12.10.06 16:02) [10]


Т.е. похоже что я прав..


 
default ©   (2006-10-12 16:07) [12]

Сергей М. ©   (12.10.06 16:04) [11]
ну да


 
Сергей М. ©   (2006-10-12 16:08) [13]


> default ©   (12.10.06 16:07) [12]


Благодарю


 
default ©   (2006-10-12 16:10) [14]

я в [3] под "а разве могут быть сомнения?" и имел ввиду что правильно


 
palva ©   (2006-10-12 16:26) [15]

А почему int64 ? Ведь это 8 байтов. А DWORD это 4 байта.


 
Axis_of_Evil ©   (2006-10-12 16:33) [16]

palva ©   (12.10.06 16:26) [15]
А почему int64 ? Ведь это 8 байтов. А DWORD это 4 байта.


тому щто вот (не в курсе, знакомы ли вы с С)
 if (*(DWORD *)(p) != *(DWORD *)(q) || ...
означает
привести р к типу "указатель на DWORD"  и взять значение по етому адресу
(соотв. значение типа DWORD, 4 bytes).
далее идет
 *(DWORD *)(p+4) != *(DWORD *)(q+4)
"+4" = +4 байта к адресу, который хранится в р, т.е. суммарно надо сравнить p и q, каждая по 8 байт.


 
palva ©   (2006-10-12 17:09) [17]

А, теперь увидел.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.047 c
2-1161180240
Adios
2006-10-18 18:04
2006.11.05
вопрос про строку


1-1159078720
Beglec
2006-09-24 10:18
2006.11.05
Как заставить explorer.exe прочитать свои настройки.


2-1161511352
sss1
2006-10-22 14:02
2006.11.05
ShellExecute


3-1157707937
Тыгыдым
2006-09-08 13:32
2006.11.05
Работа с записями :)


15-1160848270
TUser
2006-10-14 21:51
2006.11.05
Преимущества альтернативных браузеров





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский