 |
MPPC.С# - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
24.11.2013, 13:08
|
#1
|
|
|
|
Пехотинец
|
 Регистрация: 02.08.2009
 Сообщений: 57
 Популярность: 417
 Сказал(а) спасибо: 12
Поблагодарили 1 раз в 1 сообщении
|
MPPC.С#
Решился таки перевести MPPC с шарпа на свой язык, но т.к. шарп незнаю возникли пара вопросов...
Что сие за "странное" обьявление цикла?
Сколько раз он будет выполнятся? или это нечто вроде:
Код:
for(var i =1; true; i++){}
Только с отсутствием инкримента?
Который из буферов нужно хранить? Сжатые данные, либо наоборот извлеченные?
Код:
List<byte> unpackedBytes;
private void Copy(int shift, int size, ref List<byte> unpackedChunkData)
{
for (var i = 0; i < size; i++)
{
var pIndex = unpackedBytes.Count - shift;
if (pIndex < 0)
return;
var b = unpackedBytes[pIndex];
unpackedBytes.Add(b);
unpackedChunkData.Add(b);
}
}
В приведенном куске кода SIZE это кол-во копирований одного и тогже символа, или длинна последовательности начиная с shift?
Код:
packedBytes.RemoveAt(0);
что происходит с данными(понятно что удаляются), вопрос в кол-ве, и сначала ли или как?
Достаточно ли хранить последние 8кб? или нужно чуть больше?
(делаю кольцевой буффер, данные пишутся по кругу затирая старые..)
Пока вроде все возникшие вопросы...
Добавлено через 7 минут
upd...
p.s. буду благодарен если кто даст пару примеров данных, запакованые и распакованые, для тестирования алгоритма по его завершению(желательно больше 8кб для полной проверки).
Последний раз редактировалось ToRcH2565; 24.11.2013 в 13:15.
Причина: Добавлено сообщение
|
|
|
24.11.2013, 14:46
|
#2
|
|
|
|
Рыцарь-лейтенант
|
 Регистрация: 31.01.2011
 Сообщений: 413
 Популярность: 14489
 Золото Zhyk.Ru: 300
 Сказал(а) спасибо: 77
Поблагодарили 361 раз(а) в 145 сообщениях
|
Re: MPPC.С#
________________
Больше не занимаюсь читами, ушёл в серверную часть. Новый ник - int 3.
P.S. Но я всё такой же добрый модератор раздела PW.
Последний раз редактировалось Smertig; 24.11.2013 в 15:21.
|
|
|
24.11.2013, 14:59
|
#3
|
|
|
|
Пехотинец
|
 Регистрация: 02.08.2009
 Сообщений: 57
 Популярность: 417
 Сказал(а) спасибо: 12
Поблагодарили 1 раз в 1 сообщении
|
Re: MPPC.С#
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Не совсем понял, что значит кольцевой
|
|
 |
|
 |
|
Пример..(8байт кольцевой буфер)
начало пусто.
добавляем 123
123 //начало 0
добавляем 123
123123 //начало 0
Добавляем 327
72312332 //начало 1
Добавлем 9
79312332 //начало 2
Добавлем 547
79547332 //начало 5
т.е. начало это посути байт номер 0 из последних 8 байт.
Дабы не мучать систему постоянным выделением\ освобождением\перемещением кусков памяти делается кольцевой буфер, у которого начало не фиксировано, т.е. 0 байт буфера после его заполнения всегда плавает.
Добавлено через 9 минут
По функции Copy не подскажете, cкопирует 1 байт и тот же байт или последовательность.
У меня каждый раз байт номер 0 будет удалятся со сдвигом при добавлении данных, чего в данном случае я не вижу, и выходит один и тот же pIndex будет указывать на несколько разных символов после добавления очередного символа в распакованые... т.е.
b = unpackedBytes[pIndex];
unpackedBytes.Add(b);
b1 = unpackedBytes[pIndex];
unpackedBytes.Add(b);
и выходит что у меня b<>b1
Последний раз редактировалось ToRcH2565; 24.11.2013 в 15:08.
Причина: Добавлено сообщение
|
|
|
24.11.2013, 15:21
|
#4
|
|
|
|
Рыцарь-лейтенант
|
 Регистрация: 31.01.2011
 Сообщений: 413
 Популярность: 14489
 Золото Zhyk.Ru: 300
 Сказал(а) спасибо: 77
Поблагодарили 361 раз(а) в 145 сообщениях
|
Re: MPPC.С#
________________
Больше не занимаюсь читами, ушёл в серверную часть. Новый ник - int 3.
P.S. Но я всё такой же добрый модератор раздела PW.
|
|
|
24.11.2013, 15:24
|
#5
|
|
|
|
Пехотинец
|
 Регистрация: 02.08.2009
 Сообщений: 57
 Популярность: 417
 Сказал(а) спасибо: 12
Поблагодарили 1 раз в 1 сообщении
|
Re: MPPC.С#
Верно ли Copy(3, 5, 123456789) = 12345678978978
Copy(10, 5, 123456789) = 123456789
Copy(3, 7, 123456789) = 1234567897897897
?
Добавлено через 8 минут
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
пусть буфер 8 байт и в нём было 12345678
После добавления 222 должно стать 22212345.
|
|
 |
|
 |
|
бррр) вот тут совсем запутался.
У вас получается что данные с индексом 0 - последние добавленые, у меня данные с индексом 7 - последние добавленые.
и так еще раз но другими словами...
Имеем массив 8 байт
получаем по 1 байту(8 раз подряд от 1 до 8), в массиве по факту получаем 12345678
добавляем девятый байт(9), но в массиве 8 мест, тогда началом наших данных станет байт номер 1 (был досих пор 0) а байт номер 0 станет 8мым, т.е. добавленый байт перепишет то что находилось по адресу 0 в массиве..
10 байт перепишет байт номер 1, а первым байтом массива станет 2.. т.е. добавив байты 9 и 10 получим по факту такой массив:
9A345678
теперь при обращении к нему(как задумано) Buf.get[0] - выдаст нам 3 а Buf.get[7] вернет А.
Добавлено через 12 минут
и как я понимаю из всего что написано выше
List<byte> unpackedBytes;
unpackedBytes.add(byte) добавит данные в начало массива? или таки в конец. т.е. только что добавленный байт можно получить как unpackedBytes[0] или всетаки unpackedBytes[unpackedBytes.count] ?
Последний раз редактировалось ToRcH2565; 24.11.2013 в 15:36.
Причина: Добавлено сообщение
|
|
|
Пользователь сказал cпасибо:
|
|
24.11.2013, 20:38
|
#7
|
|
|
|
Пехотинец
|
 Регистрация: 02.08.2009
 Сообщений: 57
 Популярность: 417
 Сказал(а) спасибо: 12
Поблагодарили 1 раз в 1 сообщении
|
Re: MPPC.С#
Вот, теперь все понятно, тоже самое у меня и выходит...
Еще чуть чуть и я его победю.... xD
|
|
|
26.11.2013, 13:05
|
#8
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 14.06.2012
 Сообщений: 511
 Популярность: 7566
 Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
|
Re: MPPC.С#
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо" Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
Последний раз редактировалось Ginrey; 26.11.2013 в 13:12.
|
|
|
27.11.2013, 12:16
|
#9
|
|
|
|
Пехотинец
|
 Регистрация: 02.08.2009
 Сообщений: 57
 Популярность: 417
 Сказал(а) спасибо: 12
Поблагодарили 1 раз в 1 сообщении
|
Re: MPPC.С#
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Синтаксис похож на Delphi.
|
|
 |
|
 |
|
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Если я угадал, то зачем писать то, что уже давно написали за вас
|
|
 |
|
 |
|
Ткните на темку в паблике, с удовольствием перечитаю, но врятли воспользуюсь т.к. эта часть уже работает перкрасно
Еще вопрос возник в ходе тычек туды сюды... CUInt как читать и писать?)
читаю пока что 2х байтовые, иногда выползают дикие ошибки, записать 2х байтовые уже не могу по примеру с шарпа...
эксперементирую на числе 0х1197.... в итоге вместо 0х1197 должно получатся 0х9С4, тогда пандора видит правильное число... но как програмно перобразовать, пока понять немогу... причем если передать без модификаций 0х1197, то в пандоре это будет 0х1711
Непойму я эту математику никак..
Добавлено через 4 часа 19 минут
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Синтаксис похож на Delphi.
|
|
 |
|
 |
|
Перечитал все свои посты, это единственное место в данной теме где язык может быть похож на делфи, в остальных местах нет ничего необычного для прочих языков...
Собсно вопрос, в других языках не встречается квадратных скобок или есть еще место где я косвенно указал язык на котором пишу?))
Зы. С 2х байтовыми CUInt разобрался... что же ждет меня дальше?)(пока с большими не сталкивался)
Зы.
Код:
if (Code>=$80) then
Result:=ReadByte+(Code-$80)*256
Верное ли условие или всетаки
Код:
if (Code>=$80)and(Code<=$A0) then
Result:=ReadByte+(Code-$80)*256
Последний раз редактировалось ToRcH2565; 27.11.2013 в 16:39.
Причина: Добавлено сообщение
|
|
|
27.11.2013, 20:17
|
#10
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 14.06.2012
 Сообщений: 511
 Популярность: 7566
 Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
|
Re: MPPC.С#
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо" Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
|
|
|
27.11.2013, 20:42
|
#11
|
|
|
|
Пехотинец
|
 Регистрация: 02.08.2009
 Сообщений: 57
 Популярность: 417
 Сказал(а) спасибо: 12
Поблагодарили 1 раз в 1 сообщении
|
Re: MPPC.С#
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Тут и большие и маленькие, но я пока ни одно длиннее $80 не встречал
|
|
 |
|
 |
|
Оо... как так? т.е. вы не встречали пакеты длинней 128 байт? длинна пакета, его номер это CUInt...
Код:
internal uint ReadCUInt32()
{
byte code = ReadByte();
switch (code & 0xE0)
{
///.........
case 0x80:
case 0xA0:
return (uint)(BitConverter.ToUInt16(new byte[] { ReadByte(), code }, 0) & 0x3FFF);
}
return (uint)code;
}
как прочесть сей код? case 0x80: case 0xA0?
Диапазон? или что то другое?
Последний раз редактировалось ToRcH2565; 27.11.2013 в 20:44.
|
|
|
28.11.2013, 11:31
|
#12
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 14.06.2012
 Сообщений: 511
 Популярность: 7566
 Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
|
Re: MPPC.С#
ладно не буду тебе мозг ломать вот моя конструкция:
Код:
function CUInt(Pack: array of byte): integer;
var
V: integer;
B1,B2,B3,B4: byte;
begin
B1 := Pack[0];
if (B1 < $80) then V := B1
else
if (B1 < $C0) then
begin
B2 := Pack[1];
V := (( B1 Shl 8 ) or B2) and $3FFF;
end
else
begin
B2 := Pack[1];
B3 := Pack[2];
B4 := Pack[3];
V := (( B1 Shl 24 ) or ( B2 Shl 16 ) or ( B3 Shl 8 ) or B4 ) and $1FFFFFFF;
end;
result:= V;
end;
Надеюсь понятная )
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо" Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
|
|
|
28.11.2013, 15:19
|
#13
|
|
|
|
Пехотинец
|
 Регистрация: 02.08.2009
 Сообщений: 57
 Популярность: 417
 Сказал(а) спасибо: 12
Поблагодарили 1 раз в 1 сообщении
|
Re: MPPC.С#
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Надеюсь понятная )
|
|
 |
|
 |
|
Спасибо за "неломание" мозга..
Алгоритм вполне понятен, но почему у меня совсем не так и работает... пока не понятно...)
в частности побитовго "и" у меня нет для CUint в 2 байта.( and $3FFF).
и еще вопрос, что быстрей, побитовый сдвиг или таки перемножение?)))
Добавлено через 4 минуты
Хотя таки есть... перечитал свой код...
Code:=ReadByte;
if (Code>=$80) then
Result:=ReadByte+(Code-$80)*256
Последний раз редактировалось ToRcH2565; 28.11.2013 в 15:24.
Причина: Добавлено сообщение
|
|
|
28.11.2013, 19:01
|
#14
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 14.06.2012
 Сообщений: 511
 Популярность: 7566
 Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
|
Re: MPPC.С#
данная функция выполнится за долю секунды, и никак не скажется на работу программы, будь то умножение или сдвиг.
только смотри дальше будет аналогичная функция WriteCuintдля отправки пакета уже
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо" Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
|
|
|
28.11.2013, 22:27
|
#15
|
|
|
|
Рыцарь-лейтенант
|
 Регистрация: 31.01.2011
 Сообщений: 413
 Популярность: 14489
 Золото Zhyk.Ru: 300
 Сказал(а) спасибо: 77
Поблагодарили 361 раз(а) в 145 сообщениях
|
Re: MPPC.С#
________________
Больше не занимаюсь читами, ушёл в серверную часть. Новый ник - int 3.
P.S. Но я всё такой же добрый модератор раздела PW.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Пакеты и MPPC/RC4
|
krysun |
Общение разработчиков |
27 |
24.02.2018 21:10 |
MPPC
|
SilentJetty |
Общение разработчиков |
6 |
03.10.2011 17:13 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 23:48.
|
 |