Накопал в сети код на Срр немогу понять что за левые символы (: ? ==) зы:код не тронут, такой в оригинале =\ Код (Text): for( int i=0; i < pfh->NumberOfSections ; i++, psh++ ) { DWORD VirtualSize = (i==pfh->NumberOfSections-1)? (poh->SizeOfImage-psh->VirtualAddress) :(psh+1)->VirtualAddress - psh->VirtualAddress;
Если выражение перед занком вопроса верно, то выполняется следующий блок, если нет, то выполняется блок после двоеточия. Вроде так.
If i = pfh->NumberOfSections-1 then VirtualSize := poh->SizeOfImage-psh->VirtualAddress else VirtualSize := (psh+1)->VirtualAddress - psh->VirtualAddress;
а кто обладает обратным переводчиком? я написал средненький такой, но упрощает работу лишь на 50%, сложные выражения всё равно не перевести .\
да вот с пас на си, я думаю, попроще будет весьма.. там то нет всяких там.. кстати для (bool)?()) есть альтернатива дельфиновая: IfThen(boolean,(),())
Comer_ (Нехорошо улыбаясь) А как же любимые всем прогрессивным человечеством with a,b,c, array [-100...100] of integer и 1,2,3,10..100 внутри case?
что-то не могу перевести это выражение: Код (Text): (psh+1)->VirtualAddress - psh->VirtualAddress; зы: так чтоле , чую что не верно %) весь код =\ Код (Text): for i:=0 to pfh^.NumberOfSections -1 do begin if (i = pfh^.NumberOfSections-1) then VirtualSize:=(poh^.SizeOfImage - psh^.VirtualAddress) else begin inc(dword(psh),1); VirtualSize:=(psh^.VirtualAddress - psh^.VirtualAddress); end; inc(dword(psh),1); end;
первый "inc(dword(psh),1);" не нужен, я дельфи не знаю, но наверное можно записать Код (Text): VirtualSize:=((psh+1)^.VirtualAddress - psh^.VirtualAddress);
c2pas ну сделай временную переменную Код (Text): p_tmp := psh+1; VirtualSize:=(p_tmp^.VirtualAddress - psh^.VirtualAddress); или так в дельфях тоже нельзя?
c2pas psh++ означает указать на следующую секцию, т.е. что-то типа psh := PTSection(DWORD(psh) + sizeof(psh))
ээм.. я на си уже порядочно проектов написал, и всегда писал с мыслью, что psh++ это будет нормальное ++, увеличивающее поинтер на единицу. и PDWORD++ у меня так же увеличивается на единицу .\ что то тут не то .\
Comer_ > psh++ это будет нормальное ++, увеличивающее поинтер на единицу Попробуй Код (Text): #include <stdio.h> typedef struct { char c; int i; float f; } TS; int main(void) { TS ts = {'c', 1, 1.f}; TS *pts = &ts; char *pc = &ts.c; int *pi = &ts.i; float *pf = &ts.f; printf("sizeof(TS) = %d\tpts = %p, pts+1 = %p\n", sizeof(TS), pts, pts+1); printf("sizeof(char) = %d\tpc = %p, pc+1 = %p\n", sizeof(char), pc, pc+1); printf("sizeof(int) = %d\tpi = %p, pi+1 = %p\n", sizeof(int), pi, pi+1); printf("sizeof(float) = %d\tpf = %p, pf+1 = %p\n", sizeof(float), pf, pf+1); return 0; }
Comer_ Не на единицу, а на размерность типа. Исключение - void, там sizeof(void) равно 0, а ++ увеличивает на 1.
лично у меня inc(PDWORD) увеличивается на SizeOf(DWORD) ПС. Еще одна шифровка... Код (Text): bIDCmd = ( VersionParams.bIDEDeviceMap >> drive & 0x10 ) ? \ IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY; Я правильно понимаю, что если (VersionParams.bIDEDeviceMap >> drive & 0x10) > 0, то bIDCmd = IDE_ATAPI_IDENTIFY иначе bIDCmd = IDE_ATA_IDENTIFY ?