c2pas

Тема в разделе "WASM.BEGINNERS", создана пользователем c2pas, 8 ноя 2008.

  1. c2pas

    c2pas New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2008
    Сообщения:
    5
    Накопал в сети код на Срр
    немогу понять что за левые символы (: ? ==)
    зы:код не тронут, такой в оригинале =\
    Код (Text):
    1. for( int i=0; i < pfh->NumberOfSections ; i++, psh++ )
    2.     {
    3.         DWORD VirtualSize = (i==pfh->NumberOfSections-1)?
    4.                 (poh->SizeOfImage-psh->VirtualAddress)
    5.                :(psh+1)->VirtualAddress - psh->VirtualAddress;
     
  2. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Если выражение перед занком вопроса верно, то выполняется следующий блок, если нет, то выполняется блок после двоеточия. Вроде так.
     
  3. c2pas

    c2pas New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2008
    Сообщения:
    5
    ясно
    пасиб (:
     
  4. x0man

    x0man New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2008
    Сообщения:
    358
    If i = pfh->NumberOfSections-1
    then VirtualSize := poh->SizeOfImage-psh->VirtualAddress
    else VirtualSize := (psh+1)->VirtualAddress - psh->VirtualAddress;
     
  5. c2pas

    c2pas New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2008
    Сообщения:
    5
    пасиб
    x0man
     
  6. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    это наз. "тернарный оператор"
     
  7. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    а кто обладает обратным переводчиком?
    я написал средненький такой, но упрощает работу лишь на 50%, сложные выражения всё равно не перевести .\
     
  8. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Comer_
    не думаю, что 100% автопереводчик под любой случай реален даже для С -> пас.
     
  9. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    да вот с пас на си, я думаю, попроще будет весьма.. там то нет всяких там..

    кстати для (bool)?():dntknw:) есть альтернатива дельфиновая: IfThen(boolean,(),())
     
  10. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Comer_
    (Нехорошо улыбаясь) А как же любимые всем прогрессивным человечеством with a,b,c, array [-100...100] of integer и 1,2,3,10..100 внутри case?
     
  11. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
  12. c2pas

    c2pas New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2008
    Сообщения:
    5
    что-то не могу перевести это выражение:
    Код (Text):
    1. (psh+1)->VirtualAddress - psh->VirtualAddress;
    зы: так чтоле , чую что не верно %)
    весь код =\
    Код (Text):
    1.  for i:=0 to pfh^.NumberOfSections -1 do
    2.   begin
    3.    if (i = pfh^.NumberOfSections-1) then
    4.    VirtualSize:=(poh^.SizeOfImage - psh^.VirtualAddress) else
    5.    begin
    6.    inc(dword(psh),1);
    7.    VirtualSize:=(psh^.VirtualAddress - psh^.VirtualAddress);
    8.    end;
    9.    inc(dword(psh),1);
    10.   end;
     
  13. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    первый "inc(dword(psh),1);" не нужен, я дельфи не знаю, но наверное можно записать
    Код (Text):
    1. VirtualSize:=((psh+1)^.VirtualAddress - psh^.VirtualAddress);
     
  14. c2pas

    c2pas New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2008
    Сообщения:
    5
    2meduza
    нет. такая запись в делфи не допускается... =\
     
  15. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    c2pas
    ну сделай временную переменную
    Код (Text):
    1. p_tmp := psh+1;
    2. VirtualSize:=(p_tmp^.VirtualAddress - psh^.VirtualAddress);
    или так в дельфях тоже нельзя?
     
  16. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    c2pas
    psh++ означает указать на следующую секцию, т.е. что-то типа psh := PTSection(DWORD(psh) + sizeof(psh))
     
  17. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    ээм.. я на си уже порядочно проектов написал, и всегда писал с мыслью, что psh++ это будет нормальное ++, увеличивающее поинтер на единицу. и PDWORD++ у меня так же увеличивается на единицу .\
    что то тут не то .\
     
  18. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Comer_
    > psh++ это будет нормальное ++, увеличивающее поинтер на единицу
    Попробуй
    Код (Text):
    1. #include <stdio.h>
    2.  
    3. typedef struct
    4. {
    5.   char  c;
    6.   int   i;
    7.   float f;
    8. } TS;
    9.  
    10. int main(void)
    11. {
    12.   TS     ts  = {'c', 1, 1.f};
    13.   TS    *pts = &ts;
    14.   char  *pc  = &ts.c;
    15.   int   *pi  = &ts.i;
    16.   float *pf  = &ts.f;
    17.  
    18.   printf("sizeof(TS)    = %d\tpts = %p, pts+1 = %p\n", sizeof(TS),    pts, pts+1);
    19.   printf("sizeof(char)  = %d\tpc  = %p, pc+1  = %p\n", sizeof(char),  pc,  pc+1);
    20.   printf("sizeof(int)   = %d\tpi  = %p, pi+1  = %p\n", sizeof(int),   pi,  pi+1);
    21.   printf("sizeof(float) = %d\tpf  = %p, pf+1  = %p\n", sizeof(float), pf,  pf+1);
    22.   return 0;
    23. }
     
  19. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Comer_
    Не на единицу, а на размерность типа. Исключение - void, там sizeof(void) равно 0, а ++ увеличивает на 1.
     
  20. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    лично у меня inc(PDWORD) увеличивается на SizeOf(DWORD)

    ПС. Еще одна шифровка...

    Код (Text):
    1. bIDCmd = ( VersionParams.bIDEDeviceMap >> drive & 0x10 ) ? \
    2.                          IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY;
    Я правильно понимаю, что если (VersionParams.bIDEDeviceMap >> drive & 0x10) > 0, то bIDCmd = IDE_ATAPI_IDENTIFY иначе bIDCmd = IDE_ATA_IDENTIFY ?