Форум: "Прочее";
Текущий архив: 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