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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.048 c
4-1172297096
Чапаев
2007-02-24 09:04
2007.08.12
Защита


2-1184827082
Mari
2007-07-19 10:38
2007.08.12
как зная название поля узнать тип его?


4-1172262992
Альберт
2007-02-23 23:36
2007.08.12
и опять окна с переменной прозрачностью..


15-1184504361
Vendict
2007-07-15 16:59
2007.08.12
ссылочка, посылающая на один шаг назад по истории посещения


15-1184052489
Krants
2007-07-10 11:28
2007.08.12
мистическая тройка





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский