PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Не работает код


Не работает код

Сообщений 31 страница 44 из 44

31

PSY
Можно заместо state=~state присваивать в case
state 0 или единицу.
Но думаю проблема в том что *asci.asci
Нужно через переменную сначало получить значение байта из памяти в неё а после с неё значение занести в память результата а не память -память работать?

0

32

Как я понял, нужно первый байт оставлять на месте, второй записывать в конец буфера, третий на место второго, четвёртый на место предпоследнего и т.д.
Если я не ошибаюсь, то я бы сделал так:

Код:
For i=0 To InputFileSize-1
  If Not i%2
    PokeA (*OutputBuffer+i/2, PeekA (*InputBuffer+i))
  Else
    PokeA (*OutputBuffer+InputFileSize-1-i/2, PeekA (*InputBuffer+i))
  EndIf
Next
PokeA (*OutputBuffer+InputFileSize, i%2); последним дополнительным батом - чётное/не чётное число байт. Не понятно только, зачем это? Ну ладно, если автору топика это нужно...

Вместо этого участка кода:

Код:
*FirstPointer.Ascii       = *InputBuffer
*SecondPointer.Ascii  = *InputBuffer + InputFileSize - SizeOf(Byte)

*ResultPointer.Ascii  = *OutputBuffer + SizeOf(Byte)

Repeat
  Select  State
    Case  0
      *ResultPointer\a = *FirstPointer\a
      *FirstPointer + SizeOf(Byte)
    Case 1
      *ResultPointer\a = *SecondPointer\a
      *SecondPointer  - SizeOf(Byte)
  EndSelect
  
  If  *FirstPointer = *SecondPointer
    *ResultPointer\a = *FirstPointer\a
    *OutputBuffer\a = State
    Break
  EndIf
  
  State = ~State
  
ForEver

Ну вообще, по чесноку, я бы переписал по другому весь код от начала до конца, но это не важно.

0

33

А вообще вопрос к топикстартеру - зачем это? Просто если для самосовершенствования, то понятно. Но если для кодирования с целью защиты информации (а навевает на эту мысль), то грош цена такого "кодирования". Особенно, если цель защиты обычный осмысленный текст. Раскодирует новичок в течение нескольких минут, на мой взгляд.

0

34

Timon написал(а):

А вообще вопрос к топикстартеру - зачем это? Просто если для самосовершенствования, то понятно. Но если для кодирования с целью защиты информации (а навевает на эту мысль), то грош цена такого "кодирования". Особенно, если цель защиты обычный осмысленный текст. Раскодирует новичок в течение нескольких минут, на мой взгляд.

Если первый байт 0 или 1 а именно это в цикле поиска то это одно если байт чётный не чётное число то нужна проверка на нулевой бит изначально далее он в зависимости от этого начинает читать с конца или начала байты к середине в новую память после чего последний прочитанный байт чётный нет типа записывает в файл первым  (может последним,не вникал)потом остальное,а потом видимо раскодирует читая уже файл наоборот читая и занося результат к середине.

0

35

Sergeihik написал(а):

Если первый байт 0 или 1 а именно это в цикле поиска то это одно если байт чётный не чётное число то нужна проверка на нулевой бит изначально далее он в зависимости от этого начинает читать с конца или начала байты к середине в новую память после чего последний прочитанный байт чётный нет типа записывает в файл первым  (может последним,не вникал)потом остальное,а потом видимо раскодирует читая уже файл наоборот читая и занося результат к середине.

Всё как-то через чур усложнено. Зачем?
Я, может немного ошибся в алгоритме, т.к. не совсем понял задачу.
Если нужно ставить байты в порядке один с начала, следующий с конца и так далее, то тогда вот такой код:

Код:
For i=0 To InputFileSize-1
  If Not i%2
    PokeA (*OutputBuffer+i, PeekA (*InputBuffer+i/2))
  Else
    PokeA (*OutputBuffer+i, PeekA (*InputBuffer+InputFileSize-1-i/2))
  EndIf
Next
PokeA (*OutputBuffer+InputFileSize, i%2); последним дополнительным байтом - чётное/не чётное число байт.

Если бит чётности нужно записывать самым первым байтом, то совсем не сложно переделать.

0

36

Мой код содержит 8 строк вместо 22 строк у автора топика.
Но я, кстати, могу избавиться от if-else, убрав ещё три строки и получится всего 5 строк. Только, боюсь, что могут возникнуть сложности с пониманием такого кода.

0

37

Между краткостью и понятностью всегда следует выбирать понятность.

0

38

Timon написал(а):

А вообще вопрос к топикстартеру - зачем это?

Вы, наверное, остальные его темы не видели :D

0

39

Замабувараев написал(а):

Между краткостью и понятностью всегда следует выбирать понятность.

Замабувараев, понятность - вещь всё-таки относительная. Одному что-то понятно, а другому то же самое тяжело для понимания.
Но да, по этому я не стал, например, выкладывать код без if-else. Потому что многие, скорее всего не поймут.
Но в с своих кодах, если они не предназначены для других глаз, я могу так делать, я-то это без проблем прочитаю.
Хотя, в принципе, ничего сложного обойтись без if-else в данном случае нет, просто логика.

Smitis написал(а):

Вы, наверное, остальные его темы не видели

Так и есть, не видел   :dontknow:

0

40

Timon написал(а):

Как я понял, нужно первый байт оставлять на месте, второй записывать в конец буфера, третий на место второго, четвёртый на место предпоследнего и т.д.

Если использовать пример 123456, то у вас получается 135642
В логике автора поста результат должен быть таким: 162534

0

41

Timon написал(а):

грош цена такого "кодирования"

О качестве и цене кода, автор не задавал вопроса. Человек показал свой код и задал свой вопрос. По его коду, ему ответили, указав на ошибки. Обо всём остальном, в том числе об оптимизации, здесь речь не ведётся.

Отредактировано Webarion (06.05.2024 01:46:12)

0

42

Timon написал(а):

Но да, по этому я не стал, например, выкладывать код без if-else

Сударь, не лишайте себя такой возможности. Создайте отдельную соответствующую тематическую ветку и напишите там.
А здесь, об этом никто не спрашивал.

Отредактировано Webarion (06.05.2024 00:36:28)

0

43

Webarion написал(а):

Если использовать пример 123456, то у вас получается 135642
В логике автора поста результат должен быть таким: 162534

Да, в первом моём примере так. Но дальше, в сообщении №35 я отметил, что сначала неверно понял алгоритм и там же выложил переделанный код.

Webarion написал(а):

О качестве и цене кода, автор не задавал вопроса. Человек показал свой код и задал свой вопрос. По его коду, ему ответили, указав на ошибки. Обо всём остальном, в том числе об оптимизации, здесь речь не ведётся.

Отредактировано Webarion (Вчера 23:46:12)

Есть какой-то запрет в правилах? Почему бы не предложить код проще? Может топикстартер примет к сведению. А не надо, так просто проигнорирует.

0

44

Timon написал(а):

Есть какой-то запрет в правилах? Почему бы не предложить код проще?

Код проще вы не предложили, но при этом, предпочли создать предпосылку для холивара!

Отредактировано Webarion (08.05.2024 03:58:13)

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Не работает код