Не отображаются нули

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

insite2012
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.03.2013 (Пт) 8:06
Откуда: Россия, Саратов

Не отображаются нули

Сообщение insite2012 » 30.07.2013 (Вт) 19:32

Приветствую всех.
Подскажите, как решить такую проблему:
Есть bin файл, загоняю его в массив байтов. Нужно вывести в строку последовательно несколько адресов. Но дело в том, что нужно вывести именно так, как они отображаются в Hex-редакторе. И вот тут и возникает проблема. Пока в данных по адресам идут двузначные числа, все в порядке. А вот если идет запись вида 0х, то отображается только второе число, ноль не отображается.
Использую вот такую конструкцию. Что я делаю не так?
Код: Выделить всё
        Dim By() As Byte= My.Computer.FileSystem.ReadAllBytes(OpenFileDialog.FileName)
        Dim start1 As Long = &H7D0
        Dim end1 As Long = &H7D5
        Dim str As String = ""
        Do
            str = str & Conversion.Hex(By(start1))
            start1 = start1 + 1
        Loop While start1 <= end1
        Label1.Text = "Номер модуля " & str
Последний раз редактировалось insite2012 31.07.2013 (Ср) 15:58, всего редактировалось 2 раз(а).
Dulce et decorum est pro patria mori

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Не отображаются нули

Сообщение Viper » 31.07.2013 (Ср) 4:48

Функции форматирования помогут тебе.
З.Ы. Еще также не помешают класс StringBuild и цикл вида For ... Next вместо Do ... Loop While.
Весь мир матрица, а мы в нем потоки байтов!

insite2012
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.03.2013 (Пт) 8:06
Откуда: Россия, Саратов

Re: Не отображаются нули

Сообщение insite2012 » 31.07.2013 (Ср) 8:31

Viper писал(а):Функции форматирования помогут тебе.
З.Ы. Еще также не помешают класс StringBuild и цикл вида For ... Next вместо Do ... Loop While.

Спасибо. Если не трудно, можно чуть поподробнее...
Дело в том, что я новичок, и начал изучение VB всего-то месяц-полтора назад...
Dulce et decorum est pro patria mori

insite2012
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.03.2013 (Пт) 8:06
Откуда: Россия, Саратов

Re: Не отображаются нули

Сообщение insite2012 » 31.07.2013 (Ср) 17:47

В общем, решил проблему. Ввел еще одну строковую переменную и сравнение.
Вот что получилось. Может, можно и поизящнее сделать, но главное - это работает. :D
Код: Выделить всё
Imports System.IO
Public Class Form1
    Dim By() As Byte
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        OpenFileDialog1.ShowDialog()
        By = My.Computer.FileSystem.ReadAllBytes(OpenFileDialog1.FileName)
        Dim start_adress As Long = &H7D0
        Dim end_adress As Long = &H7D5
        Dim str As String = ""
        Dim nomer As String = ""
        Do
            str = Conversion.Hex(By(start_adress))
            If str <= &HF Then str = &H0 & str
            nomer = nomer & str
            start_adress = start_adress + &H1
        Loop While start_adress <= end_adress
        Debug.WriteLine(nomer)
    End Sub
End Class
Dulce et decorum est pro patria mori

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.07.2013 (Ср) 17:55

Бррр... Используй Integer, StringBuilder, For, ToString и не обязательно читать весь файл если нужен только кусок.

insite2012
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.03.2013 (Пт) 8:06
Откуда: Россия, Саратов

Re: Не отображаются нули

Сообщение insite2012 » 31.07.2013 (Ср) 18:04

Qwertiy писал(а):Бррр... Используй Integer, StringBuilder, For, ToString и не обязательно читать весь файл если нужен только кусок.

Ну да, только я новичок же еще... :D
Буду очень благодарен, если покажете, как проще сделать то же самое.
А файл нужен весь, мне к нему еще по нескольким адресам обращаться, там еще данные есть, что я буду выводить.
Dulce et decorum est pro patria mori

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.07.2013 (Ср) 18:07

insite2012 писал(а):Ну да, только я новичок же еще... :D
Буду очень благодарен, если покажете, как проще сделать то же самое.

Вечером напишу. Версию VS напиши только.

insite2012 писал(а):А файл нужен весь, мне к нему еще по нескольким адресам обращаться, там еще данные есть, что я буду выводить.

Ok. Но на будущее учти. И большие файлы в любом случае держать в памяти не стоит.

insite2012
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.03.2013 (Пт) 8:06
Откуда: Россия, Саратов

Re: Не отображаются нули

Сообщение insite2012 » 31.07.2013 (Ср) 18:33

Спасибо. :D Работаю с версией VS2010
Dulce et decorum est pro patria mori

insite2012
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.03.2013 (Пт) 8:06
Откуда: Россия, Саратов

Re: Не отображаются нули

Сообщение insite2012 » 31.07.2013 (Ср) 20:01

И еще вопрос, если можно...
Пишу программу, там присутствует Таб Контрол с тремя вкладками. Есть ли возможность в VB выделить функции третей вкладки в отдельный модуль или dll, с таким расчетом. чтобы без этой библиотеки две оставшиеся вкладки работали корректно, а при добавлении ее становилась активной и третья вкладка.
Dulce et decorum est pro patria mori

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.07.2013 (Ср) 20:03

insite2012 писал(а):Пишу программу, там присутствует Таб Контрол с тремя вкладками. Есть ли возможность в VB выделить функции третей вкладки в отдельный модуль или dll, с таким расчетом. чтобы без этой библиотеки две оставшиеся вкладки работали корректно, а при добавлении ее становилась активной и третья вкладка.

Есть. А зачем тебе это надо?

insite2012
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.03.2013 (Пт) 8:06
Откуда: Россия, Саратов

Re: Не отображаются нули

Сообщение insite2012 » 31.07.2013 (Ср) 20:20

Qwertiy писал(а):Есть. А зачем тебе это надо?

Ну как зачем)))
Без этой библиотеки программа полуфункциональна, а вот с ней - полностью. Для того и надо. Своеобразная защита.
Dulce et decorum est pro patria mori

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.07.2013 (Ср) 21:49

insite2012 писал(а):
Код: Выделить всё
If str <= &HF Then str = &H0 & str

Неверно. Падает, если число в шестнадцатеричной записи содержит буквы. И ещё с охапкой других чисел работает неверно.

insite2012 писал(а):Буду очень благодарен, если покажете, как проще сделать то же самое.

Код: Выделить всё
Imports System.Text

Module All

Public Function SubarrayInHex(ByVal A As Byte(), ByVal L As Integer, ByVal R As Integer) As String
  Dim Res As New StringBuilder((R - L + 1) << 1)

  For Q As Integer = L To R
    Res.Append(A(Q).ToString("X2"))
  Next Q

  Return Res.ToString()
End Function

Public Sub Main()
  Dim A(4095) As Byte, Res As String

  Call (New Random).NextBytes(A)
  A(2000) = 10
  Res = SubarrayInHex(A, 2000, 2005)

  MsgBox(Res, , Res.Length)
End Sub

End Module

Кстати, существуют операторы +=, &= и другие - для большинства операций.

insite2012 писал(а):Ну как зачем)))
Без этой библиотеки программа полуфункциональна, а вот с ней - полностью. Для того и надо. Своеобразная защита.

А смысл, если всё решается копированием dll-файла?

insite2012
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.03.2013 (Пт) 8:06
Откуда: Россия, Саратов

Re: Не отображаются нули

Сообщение insite2012 » 31.07.2013 (Ср) 22:49

Спасибо, проверил, все отлично работает) Буду использовать в своей программе. Функция что надо.
А по dll - ведь в основной программе я же могу сделать ссылку на нее, но с другим именем? Т.е. переименовать саму dll?
Dulce et decorum est pro patria mori

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.07.2013 (Ср) 22:55

insite2012 писал(а):А по dll - ведь в основной программе я же могу сделать ссылку на нее, но с другим именем? Т.е. переименовать саму dll?

Не понимаю идею.

insite2012
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.03.2013 (Пт) 8:06
Откуда: Россия, Саратов

Re: Не отображаются нули

Сообщение insite2012 » 31.07.2013 (Ср) 23:00

Идея очень проста. Я в тексте программы прописываю имя dll. И саму dll так называю.
Отправляю человеку. А у другого есть программа, но с другим именем dll внутри (или вообще без него). Естественно, его программа с этой dll работать уже не будет, так ведь?
Dulce et decorum est pro patria mori

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.07.2013 (Ср) 23:13

А что помешает второму взять dll у первого и пользоваться?
И что ты имеешь в виду под другим именем?

insite2012
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.03.2013 (Пт) 8:06
Откуда: Россия, Саратов

Re: Не отображаются нули

Сообщение insite2012 » 31.07.2013 (Ср) 23:19

Qwertiy писал(а):А что помешает второму взять dll у первого и пользоваться?
И что ты имеешь в виду под другим именем?

Ну то, что помешает, это все можно сделать... К примеру, подписывание внутри основного файла и внутри самой dll, кому они принадлежат...
А имя - так любое, какое возможно... ну к примеру, набор цифр. точка, три цифры.
Такое возможно осуществить на практике?
Просто, как я говорил, опыта программирования чуть меньше чем никакого, занимаюсь сам, по учебникам. :D
Dulce et decorum est pro patria mori

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.07.2013 (Ср) 23:34

insite2012 писал(а):Ну то, что помешает, это все можно сделать... К примеру, подписывание внутри основного файла и внутри самой dll, кому они принадлежат...
А имя - так любое, какое возможно... ну к примеру, набор цифр. точка, три цифры.
Такое возможно осуществить на практике?
Просто, как я говорил, опыта программирования чуть меньше чем никакого, занимаюсь сам, по учебникам. :D

Сделать можно всё что угодно. Я так понимаю, твой метод подразумевает отдельную компиляцию для каждого человека? Для этого нужно вынести этот код в отдельный проект (солюшн может содержать несколько проектов, но если у тебя express-студия, то надо сначала руками подправить sln-файл) и использовать рефлексию для его загрузки.
Для информации. Любое обращение к файлам можно отследить. И любую .NET программу можно легко декомпилировать до уровня близкого к исходному коду. А если не использовать какую-нибудь обфускацию, то единственными запутывающими факторами будут лямбда-функции и кривость твоего кода :D

И вообще, мне непонятно, зачем это может быть надо начинающему программисту.

insite2012
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.03.2013 (Пт) 8:06
Откуда: Россия, Саратов

Re: Не отображаются нули

Сообщение insite2012 » 31.07.2013 (Ср) 23:47

Студия у меня Ultimate. И обфускатор есть, этот трюк я уже знаю))) Да и .NET Reflector тоже испытывал, так что про легкость декомпилирования .NET в курсе)
Мне главное понять, как это использовать на практике. Ну а по начинающему - я же не всегда им буду... Будут проекты (они уже в ближайших планах), которые мне бы хотелось закрыть. Они хоть и простые, но в определенных кругах будут пользоваться спросом. И у меня нет желания раскидывать полнофункциональный продукт направо и налево.
Dulce et decorum est pro patria mori


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList