Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.12;
Скачать: CL | DM;

Вниз

Велик могучим С++ языка ! :)   Найти похожие ветки 

 
Riply ©   (2007-07-14 07:05) [0]

Здравствуйте !
Помогите, пожалуйста с переводом:

b = *buf & 0xf;
 if (b) {
  if (buf + b > attr_end)
   goto io_error;
  for (deltaxcn = (s8)buf[b--]; b; b--)
   deltaxcn = (deltaxcn << 8) + buf[b];
 } else bla - bla :)
где
u8 = Byte;
s8 = Byte; // Signed ???
s64 = Int64;

b u8;
const u8 *buf;  
const u8 *attr_end;
s64 deltaxcn;


У меня получилось следующее:
b := buf^ and $F;
if b <> 0 then
 begin
  if (DWord(buf) + b > DWord(attr_end)) then goto io_error;
  deltaxcn := PByte(DWord(buf) + b - 1)^;
  while b <> 0 do
   begin
    deltaxcn = (deltaxcn shl 8) + PByte(DWors(buf) + b)^;
    dec(b);
   end;

но "терзают смутные сомнения" (с) :)
Особенно насчет начального значения b на первом шаге цикла.


 
Kolan ©   (2007-07-14 08:25) [1]

> [0] Riply ©   (14.07.07 07:05)

Что же вы там переводите уже месяц, а то и два?


 
@!!ex ©   (2007-07-14 10:34) [2]

Я ошибок не нашел.


 
palva ©   (2007-07-14 10:39) [3]

> deltaxcn := PByte(DWord(buf) + b - 1)^;
Наверно так:
deltaxcn := PByte(DWord(buf) + b)^; b := b - 1;


 
VirEx ©   (2007-07-14 10:41) [4]


> Велик могучим С++ языка ! :)

а я думал перевести заголовок...


 
celades ©   (2007-07-14 11:22) [5]


> Велик могучим С++ языка ! :)
>

это С в первую очередь


 
Sonia ©   (2007-07-14 11:36) [6]

А нам преподы говорили, что использовать goto - это плохой стиль программирования


 
palva ©   (2007-07-14 11:41) [7]

goto - это готично.


 
@!!ex ©   (2007-07-14 12:29) [8]

> [6] Sonia ©   (14.07.07 11:36)

ПРавы.
Но, как показывает практика, преподы обычно очень далеки от практического программирования.
То что считается плозим стилем, иногда позволяет добиться правильных результатов дешевле и ыбстрее.


 
Riply ©   (2007-07-14 19:24) [9]

[1] Kolan © (14.07.07 08:25)
> Что же вы там переводите уже месяц, а то и два?
Люблю, на сон грядущий, чужие исходники почитать :)
А Вы что читаете перед сном ?

>[3] palva © (14.07.07 10:39)
> deltaxcn := PByte(DWord(buf) + b - 1)^;
>Наверно так:
>deltaxcn := PByte(DWord(buf) + b)^; b := b - 1;
Я склоняюсь к такому варианту:
b := b - 1; deltaxcn := PByte(DWord(buf) + b)^;
Или тоже не то ?

И еще нашла потрясающую строчку:
vcn += Length = max_cluster - deltaxcn;
Переведите, пожалуйста, кто кому присваивается и когда инкрементируется ?
У меня даже вариантов нет :(


 
celades ©   (2007-07-14 19:29) [10]


> vcn += Length = max_cluster - deltaxcn;

вначале результат max_cluster - deltaxcn присваивается Length, а потом он же прибавляется к  vcn.


 
Riply ©   (2007-07-14 19:33) [11]

> [10] celades ©   (14.07.07 19:29)
Т.е.
Length := max_cluster - deltaxcn;
vcn := vcn + Length;
?


 
celades ©   (2007-07-14 19:37) [12]

угу


 
Anatoly Podgoretsky ©   (2007-07-14 19:42) [13]

> Riply  (14.07.2007 19:24:09)  [9]

Сначала присваивается Length
потом суммируется c vcn

Length := max_cluster - deltaxcn;
vcn := vcn + Length;


 
Anatoly Podgoretsky ©   (2007-07-14 19:48) [14]

> celades  (14.07.2007 19:29:10)  [10]

Не правда, не присваивается, а суммируется с vcn


 
Anatoly Podgoretsky ©   (2007-07-14 19:48) [15]

> Riply  (14.07.2007 19:33:11)  [11]

Он написал другое vcn := Length; а это неверно


 
Riply ©   (2007-07-14 20:04) [16]

> [14] Anatoly Podgoretsky ©   (14.07.07 19:48)
Т.е. в результате у нас в Length сидит max_cluster - deltaxcn,
а в vcn старое значение vcn плюс новое Length
?


 
celades ©   (2007-07-14 20:08) [17]


>
> Не правда, не присваивается, а суммируется с vcn

ну а я что написал?)


 
Anatoly Podgoretsky ©   (2007-07-14 20:10) [18]

> Riply  (14.07.2007 20:04:16)  [16]

Правильно


 
Anatoly Podgoretsky ©   (2007-07-14 20:12) [19]

> celades  (14.07.2007 20:08:17)  [17]

Ты написал, что Length присваивается vcn, а это не так.
Между vcn := Length и vcn := vcn + Length большая разница.


 
celades ©   (2007-07-14 20:16) [20]


> celades ©   (14.07.07 19:29) [10]
>
>
> > vcn += Length = max_cluster - deltaxcn;
>
> вначале результат max_cluster - deltaxcn присваивается Length,
>  а потом он же прибавляется к  vcn.
>

я как-то раньше думал, что глагол "прибавлять" имеет другое значение нежели другой глагол - "присваивать", а главное другое написание.

> Anatoly Podgoretsky ©   (14.07.07 20:12) [19]
>
> > celades  (14.07.2007 20:08:17)  [17]
>
> Ты написал, что Length присваивается vcn, а это не так.


 
Riply ©   (2007-07-14 20:24) [21]

Спасибо всем большое !
P.S.
Найду еще такие строчки - приду снова :)


 
Внук ©   (2007-07-14 20:28) [22]

>>Riply ©   (14.07.07 07:05)
 Посмотрите, на первой итерации при выполнении тела цикла for
deltaxcn = (deltaxcn << 8) + buf[b];
чему будет равно b в сишном примере и в паскалевском. Может, я невнимателен, но они будут отличаться на 1.


 
Внук ©   (2007-07-14 20:30) [23]

Я имею в виду, что в паскалевском варианте строчки
  deltaxcn = (deltaxcn shl 8) + PByte(DWors(buf) + b)^;
   dec(b);

надо поменять местами.


 
Riply ©   (2007-07-14 20:34) [24]

> [22] Внук ©   (14.07.07 20:28)
Было бы на чем посмотреть сишную итерацию - я была бы счастлива :)


 
Riply ©   (2007-07-14 20:36) [25]

> [23] Внук ©   (14.07.07 20:30)
Т.е. как я написала в [9] ?


 
palva ©   (2007-07-14 21:20) [26]


> Riply ©   (14.07.07 19:24) [9]
> Я склоняюсь к такому варианту:
> b := b - 1; deltaxcn := PByte(DWord(buf) + b)^;
> Или тоже не то ?

Не то. Два минуса стоят после буквы b. Это значит, что значение b надо сначала использовать, как есть, и лишь потом уменьшить на единицу.


 
Riply ©   (2007-07-14 22:48) [27]

> [26] palva ©   (14.07.07 21:20)
>Не то. Два минуса стоят после буквы b. Это значит, что значение b надо сначала использовать,
>как есть, и лишь потом уменьшить на единицу.
Пыталась устроить проверку (в Delphi)
Судя по тому, что промежуточные значения в пределах нормы, именно так и надо :)
Спасибо.



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

Текущий архив: 2007.08.12;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.029 c
3-1177569346
tytus
2007-04-26 10:35
2007.08.12
TOracleQuery - описание переменных - ошибка ORA-01036


11-1150264932
MZUser
2006-06-14 10:02
2007.08.12
Создание DLL


15-1184293628
Slider007
2007-07-13 06:27
2007.08.12
С днем рождения ! 13 июля 2007 пятница


2-1184679041
lamerskii_vopros
2007-07-17 17:30
2007.08.12
запрос


15-1184446989
Kostafey
2007-07-15 01:03
2007.08.12
С днем рождения ! 15 июля