1. Теперь за форумную активность начисляются биткоины и другие криптоденьги. Подробнее.
    Скрыть объявление
  2. Появилась архивная версия форума arhiv.xaker.name, где собраны темы с 2007 по 2012 год.
    Скрыть объявление

Помощь с алгоритмом

Тема в разделе "Visual Basic", создана пользователем MCU Destroyer, 14 мар 2012.

  1. MCU Destroyer
    MCU Destroyer Новичок
    Симпатии:
    0
    Здравствуйте.

    Помогите пожалуйста с такой програмкой (это не лабораторка и не что-то по учебе - это для ускорения процесса на работе, а то с калькулятором устал возиться):

    В форме программы я ввожу какое-то число в одно из полей для ввода, например 4F (число шестнадцатеричное, всегда двухбайтовое, если старший байт ноль, то его можно и не вводить. Пример - вместо 0А можно ввести просто А)

    Далее одной строкой во второе поле я ввожу массив шестнадцатеричных чисел, например 43510110005C2800001E00E083FFC1079A000411 Это двадцать байтов, которые не разделены пробелами. То есть в оригинале это выглядит как 43 51 01 10 00 5C 28 0А 00 1E 10 E0 83 FF C1 07 9A 00 04 11
    Но по ряду причин вводиться будет без пробелов.
    Далее на форме есть простая кнопка вычислить, при нажатии на которую надо чтобы то мое первое число начало xor с каждым байтом массива и далее мне был выведен результат этого xor.

    То есть первое число 4F. Ввели строку 43510110005C2800001E00E083FFC1079A000411. Нажали вычислить и программа сделала 4F xor 43 xor 51 xor 01 и так далее до xor 11. Получившийся ответ (например FB) вывело ну в туже форму.

    Хотелось бы попросить, чтобы программа была на Visual Basic, и если не затруднит, к ней можно добавить исходники.

    Заранее спасибо тому кто откликнется.
     
    14 мар 2012
  2. chimatii
    chimatii Глобальный модератор
    Симпатии:
    101
    MCU Destroyer, алгоритм:

    Код:
    a = "43510110005C2800001E00E083FFC1079A000411"
    c = "0A"
    
    For i = 1 To Len(a) Step 2
    c = Hex(Val("&H" & c) Xor Val("&H" & Mid(a, i, 2)))
    Next i
    
    MsgBox c
    всякие рюшечки, навроде данные с формы организуете сами)
     
    14 мар 2012
    1 человеку нравится это.
  3. MCU Destroyer
    MCU Destroyer Новичок
    Симпатии:
    0
    chimatii,

    Спасибо за алгоритм.
    Вот что наваял:
    Код:
            Dim a As String
            Dim c As String
            Dim i As Integer
    
            c = "5A"
    
            'a = Val(TextBox1.Text)
    
            a = "43500112005B2801001E00E083FFC1079A000411"
    
            For i = 1 To Len(a) Step 2
                c = Hex(Val("&H" & c) Xor Val("&H" & Mid(a, i, 2)))
            Next i
    
            Label1.Text = c
    
    Проблема - если переменной а значение присваиваю в самой программе, считает верно, а если пытаюсь из TextBox (строка закомментирована), то считает неверно...
    А что я не так делаю с TexBox ?

    И еще вопрос - если вместо XOR использовать обычное + то надо считать так:

    Код:
    c = Hex(Val("&H" & c) And Val("&H" & Mid(a, i, 2)))
    
    Я правильно понял?
     
    14 мар 2012
  4. chimatii
    chimatii Глобальный модератор
    Симпатии:
    101
    val не надо:

    Код:
    a = Val(TextBox1.Text)
    
    да так и будет: +

     
    14 мар 2012
  5. MCU Destroyer
    MCU Destroyer Новичок
    Симпатии:
    0
    chimatii,

    Спасибо огромное!.

    И еще последний вопросик:

    когда я считаю сумму по
    Код:
    c = Hex(Val("&H" & c) + Val("&H" & Mid(a, i, 2))) 
    
    у меня может возникнуть перенос в 3-й байт, то есть может быть например результат в виде FA (это нормально) а может например 1FF (это тоже нормально) но во втором случае мне интересно только FF (1 можно откинуть). Вот как оформить чтобы откидывать перенос применительно к выводу в Label ?
     
    14 мар 2012
  6. chimatii
    chimatii Глобальный модератор
    Симпатии:
    101
    обрезать нужные 2 знака справа:

    Код:
    b = Right("1FF",2)
     
    14 мар 2012
  7. MCU Destroyer
    MCU Destroyer Новичок
    Симпатии:
    0
    chimatii,

    Не, скорее всего не так..
    У меня выводится так:
    Код:
    Label1.Text = b
    
    результатом может быть например 1FF. Но надо чтобы 1 отбрасывалось, а оставалось FF.
     
    14 мар 2012
  8. chimatii
    chimatii Глобальный модератор
    Симпатии:
    101
    MCU Destroyer,

    Код:
    Label1.Text = b
    Label1.Text = Right(Label1.Text,2)
     
    14 мар 2012
  9. MCU Destroyer
    MCU Destroyer Новичок
    Симпатии:
    0
    Хм, не работает.
    Использую Visual Studio 2010.
    В конструкции
    Код:
    Label1.Text = Right(Label1.Text,2)
    ругается на Right.

    "Public ReadOnly Property Right As Integer" не имеет параметров, поэтому невозможно проиндексировать возвращаемый им тип.

    Переменная b определена как String.
     
    14 мар 2012
  10. Mr.Burns
    Mr.Burns местная мразь Продвинутый
    Симпатии:
    65
    может ошибаюсь, но в Label есть только Caption.

    Код:
    Label1.Caption = Right(Label1.Caption,2)
     
    14 мар 2012
  11. MCU Destroyer
    MCU Destroyer Новичок
    Симпатии:
    0
    Всем спасибо за подсказки, но ни одним из представленных способов, ненужный символ не отбрасывается - сообщение об ошибке.
     
    15 мар 2012
  12. chimatii
    chimatii Глобальный модератор
    Симпатии:
    101
    MCU Destroyer, хах) по моему, нашел решение проблемы:

    Код:
    Strings.Right(Label1.Caption,2)
    синтаксис отличается, между vb6 и vb2010 12 лет разницы, хуле)
     
    15 мар 2012
  13. lytgeygen
    lytgeygen pacifiste maniaque Новичок
    Симпатии:
    112
    [+] оффтоп
    chimatii, матершиник :) хуле, надо вообще полностью переходить кажется на vb.net потому что дотнет почти на каждом компе, да и на новой ОС всегда проблемы почти с запуском VB6 билдов (^_^)
    [свернуть]
     
    16 мар 2012
  14. MCU Destroyer
    MCU Destroyer Новичок
    Симпатии:
    0
    :-[

    Теперь я кажется совсем запутался.

    вот по тексту программы у меня идет:

    Код:
    c = Hex(Val("&H" & c) + Val("&H" & Mid(a, i, 2)))
    
    Далее используя Label я результат вывожу на форму:

    Код:
    Label1.Text = c
    
    В итоге у меня может вывестись как что-то, например вида AF а может 1A9.
    В перво мслучае все нормально, во втором мне надо вывест итолько A9, не выводя 1.

    Предложенный вариант chimatii куда вставлять то? :)
     
    16 мар 2012
  15. Mei
    Mei bit of love Продвинутый
    Симпатии:
    214
    16 мар 2012
  16. ~|~евто|-|
    ~|~евто|-| Silentium Новичок
    Симпатии:
    162
    16 мар 2012
    1 человеку нравится это.
  17. chimatii
    chimatii Глобальный модератор
    Симпатии:
    101
    MCU Destroyer, вместо

    Код:
    Label1.Text = c
    используй

    Код:
    Label1.Text = Strings.Right(c, 2)
     
    16 мар 2012
  18. MCU Destroyer
    MCU Destroyer Новичок
    Симпатии:
    0
    chimatii,
    Спасибо!

    Я чуть по другому наваял, тоже работает:

    Код:
    Label1.Text = c
    Label1.Text = Strings.Right(Label1.Text, 2)
    
    И еще один вопросик: :-[
    предполагается, что данные, которые обсчитывает программа уже находятся в буфере обмена.
    На форме программы есть кнопка "Вставить".
    Вот при нажатии на эту кнопку, надо чтобы в окно TextBox "поместился" курсор и произошло вставление данных из буфера обмена.

    А как реализовать?

    Добавлено через 1 час 32 минуты
    Решение нашел:

    Код:
    TextBox1.Text = Clipboard.GetText
    Из буфера вставляем текст в TextBox.

    Тем не менее всем огромное спасибо за помощь с программкой! :pivo:
     
    Последнее редактирование: 16 мар 2012
    16 мар 2012
  19. chimatii
    chimatii Глобальный модератор
    Симпатии:
    101
    опять же, не знаю как там дело обстоит с 2010, в 6 версии есть функции для работы с буфером обмена

    Код:
    Text1.Text = Clipboard.GetText
    з.ы. опоздал(
     
    16 мар 2012

Поделиться этой страницей

Загрузка...