Главная страница
    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.053 c
15-1184522210
Yanis
2007-07-15 21:56
2007.08.12
Новое веяние спама: pdf файлы. Обнаружил в почте.


2-1184135112
Б.А.С.
2007-07-11 10:25
2007.08.12
Программный вход в систему


6-1167761692
maxistent
2007-01-02 21:14
2007.08.12
Как отменить отправку данных?


15-1184312367
Romkin
2007-07-13 11:39
2007.08.12
Принтер с двухсторонней печатью


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