Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Помогите двоичный код. Добавлено: 01.06.05 08:01  

Автор вопроса:  hak
Как открыть файл в двоичном виде, передать двоичный код файла в текстовое поле(10011001)(без Ansi, чтобы мог открыть любой файл), а по нажатию кнопки записать (может через Put?) двоичный код в файл? Нужно очень!!!Нужно срочно, горю!!! Заранее благодарен.

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #1
Добавлено: 01.06.05 10:58
 Просто это сделать не получится. Нужно на входе переводить двоичные данные в строку, а на выходе обратно.

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 01.06.05 21:46
Как открыть файл в двоичном виде

Открой в обычном, переведи в двоичный...

передать двоичный код файла в текстовое поле

Text1 = stoka$

без Ansi, чтобы мог открыть любой файл

Непонял? А что если в анси то не любой?

а по нажатию кнопки записать (может через Put?) двоичный код в файл?


Private Sub Command1_Click ()
CALL SaveToFile ("10101011",C:\1.txt)
End sub

Private Sub SaveToFile(Data$, PathFile As String)
'Сохранение переменной в файл
   n = FreeFile
   Open PathFile For Binary As #n
   Put n, , Data$
   Close #n
End Sub

Ответить

Номер ответа: 3
Автор ответа:
 hak



Вопросов: 5
Ответов: 12
 Профиль | | #3 Добавлено: 02.06.05 12:42
Спасибо! А как считать в двоичном виде не подскажешь? Без Ansi чтобы мог читать картинки, звук и т.д. Если не знаешь то подскажи плиз хотя бы как из обычного перевести в двоичный, что-то я там не то делаю.

Ответить

Номер ответа: 4
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #4
Добавлено: 02.06.05 13:03
Например так:

Function Bin1(ByVal ByteValue As Byte) As String
 Dim NextBit As Byte
 While ByteValue > 0
  NextBit = ByteValue Mod 2
  ByteValue = ByteValue - NextBit
  ByteValue = ByteValue \ 2
  Bin1 = LTrim$(NextBit) & Bin1
 Wend
End Function

Private Sub Form_Load()
MsgBox Bin1(&HF0)
End Sub


 Написал только что за 2 минуты. Вроде рабочий :)
 Переводит байт из десятичной в двоичную.

Ответить

Номер ответа: 5
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 02.06.05 13:17
Ну а вот обратно в двоичную:

Function Dec1(BinNumber As String) As Byte
 Dim BitCounter As Integer, NextBit As Byte
 For BitCounter = Len(BinNumber) To 1 Step -1
  ;Dec1 = Dec1 + Val(Mid$(BinNumber, BitCounter, 1)) * (2 ^ NextBit)
  NextBit = NextBit + 1
 Next BitCounter
End Function

Private Sub Form_Load()
MsgBox Hex$(Dec1(Bin1(&HF0)))
End Sub

Ответить

Номер ответа: 6
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #6
Добавлено: 02.06.05 13:18
Т.е. обратно в десятичную.

Ответить

Номер ответа: 7
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #7 Добавлено: 02.06.05 13:22
Анси + умеет в хекс

Private Function DataToNum(Data, inHex As Boolean) As String
'Для Кодирование данных
If inHex = False Then
 For pos = 1 To Len(Data)
  DoEvents
  ;DataToNum = DataToNum & Format(Asc(Mid(Data, pos, 1)), "000";)  
 Next pos
Else
 For pos = 1 To Len(Data)    
    'Проверяем на символ перехода на новую строку
    If Mid(Data, pos, 1) = Left(vbNewLine, 1) Then
    ;DataToNum = DataToNum & Hex$(13) & " " ': pos = pos + 1
    Else  
    ;DataToNum = DataToNum & Hex$(Asc(Mid(Data, pos, 1))) & " "
    End If
 Next pos
End If
ext:
If Right(DataToNum, 1) = " " Then DataToNum = Left(DataToNum, Len(DataToNum) - 1)
End Function

Ответить

Номер ответа: 8
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #8 Добавлено: 02.06.05 13:26
о! на тебе всеь класс...

'=============================================================================
'Класс для кодирования/декодирования файлов в числа, по принципу ASCII таблицы
'Умеет кодировать и декодировать в ascii значения и hex значения
'Написано HACKER'ом в 2005 году
'=============================================================================

Public Sub EncodeFromFile_TO_File(sInputFile As String, sOutputFile As String, inHex As Boolean)
'Кодирование с файла в файл
 bTemp$ = LoadTextFile(sInputFile)
 bTemp$ = DataToNum(bTemp, inHex)
 SaveToFile bTemp$, sOutputFile
End Sub

Public Function EncodeFromFile(sInputFile As String, inHex As Boolean) As String
 'Кодирование с файла в переменную
 bTemp$ = LoadTextFile(sInputFile)
 bTemp$ = DataToNum(bTemp, inHex)
 EncodeFromFile = bTemp$
End Function
Public Function EncodeData(sData As String, inHex As Boolean) As String
 'Кодирование с переменной в переменную
   bTemp$ = DataToNum(sData, inHex)
 EncodeData = bTemp$
End Function

Public Function EncodeData_To_File(sData As String, sFIle As String, inHex As Boolean) As String
 'Кодирование с переменной в файл
   bTemp$ = DataToNum(sData, inHex)
   SaveToFile bTemp$, sFIle
End Function
Public Function DecodeData(sData As String, inHex As Boolean) As String
'Декодирование с переменной в переменную
  bTemp$ = NumToData(sData, inHex)
DecodeData = bTemp$
End Function

Public Sub DecodeFromFile_TO_File(sInputFile As String, sOutputFile As String, inHex As Boolean)
'Декодирование с файла в файл
 bTemp$ = LoadTextFile(sInputFile)
 bTemp$ = NumToData(bTemp$, inHex)
 SaveToFile bTemp$, sOutputFile
End Sub

Public Function DecodeFromFile(sInputFile As String, inHex As Boolean) As String
'Декодирование с файла в переменную
 bTemp$ = LoadTextFile(sInputFile)
 bTemp$ = NumToData(bTemp$, inHex)
 ;DecodeFromFile = bTemp$
End Function

Public Function DecodeData_TO_File(strData As String, strFile As String, inHex As Boolean) As String
'Декодирование переменной в файл
 bTemp$ = NumToData(strData, inHex)
SaveToFile bTemp$, strFile
End Function

Private Function DataToNum(Data, inHex As Boolean) As String
Form3.Show '!'
Form3.Label3 = "Идёт кодирование данных, пожалуйста подождите..." '!'

'Для Кодирование данных
If inHex = False Then
 For pos = 1 To Len(Data)
  DoEvents
  ;DataToNum = DataToNum & Format(Asc(Mid(Data, pos, 1)), "000";)
  
'Высчитывание в процентном соотнешении ход работы и прорисовка прогресбара на форме
 DoEvents
  Form3.lblProgress = Int(100 * pos / Val(Len(Data))) '!'
  If Form3.Tag = "Stop" Then Form3.Tag = "": GoTo ext '!'
'-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 Next pos
Else
 For pos = 1 To Len(Data)
     
    'Проверяем на символ перехода на новую строку
    If Mid(Data, pos, 1) = Left(vbNewLine, 1) Then
    ;DataToNum = DataToNum & Hex$(13) & " " ': pos = pos + 1
    Else
  
    ;DataToNum = DataToNum & Hex$(Asc(Mid(Data, pos, 1))) & " "
    End If

'Высчитывание в процентном соотнешении ход работы и прорисовка прогресбара на форме
DoEvents
Form3.lblProgress = Int(100 * pos / Val(Len(Data))) '!'
If Form3.Tag = "Stop" Then Form3.Tag = "": GoTo ext '!'
'-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
 Next pos
End If
ext:
If Right(DataToNum, 1) = " " Then DataToNum = Left(DataToNum, Len(DataToNum) - 1)

Form3.Label3 = ""
Unload Form3
End Function

Private Function NumToData(StrNum As String, inHex As Boolean) As String
Form3.Show '!'
Form3.Label3 = "Идёт декодирование данных, пожалуйста подождите..." '!'


'Для декодирования данных
If inHex = False Then
StrNum = Replace(StrNum, vbNewLine, "";)
 For pos = 1 To Len(StrNum) Step 3

 NumToData = NumToData & Chr(Mid(StrNum, pos, 3))

'Высчитывание в процентном соотнешении ход работы и прорисовка прогресбара на форме
DoEvents
Form3.lblProgress = Int(100 * pos / Val(Len(StrNum)))
If Form3.Tag = "Stop" Then Form3.Tag = "": GoTo ext '!'
 Next pos
Else


StrNum = Replace(StrNum, vbNewLine, "";)

For pos = 1 To Len(StrNum)

s$ = s$ & Mid(StrNum, pos, 1)
 
If Len(s$) = 2 Or pos = Len(StrNum) Then
    If s$ <> " " Then
    s = Replace(s, " ", "";)
    If Mid(StrNum, pos + 1, 1) <> " " Then pos = pos - 1
    pos = pos + 1
    NumToData = NumToData & Chr(Val("&H" & s$))
s$ = ""
    End If
s$ = ""
End If

'Высчитывание в процентном соотнешении ход работы и прорисовка прогресбара на форме
DoEvents
'Form3.lblProgress = Int(100 * pos / Val(Len(StrNum)))
If Form3.Tag = "Stop" Then Form3.Tag = "": GoTo ext '!'
nextPos:
 Next pos
End If
ext:
Form3.Label3 = "" '!'
Unload Form3 '!'
End Function

Private Function LoadTextFile(path As String) As String
'Загрузка файла в переменную
 Dim l As Long
 Dim s As String
 n = FreeFile
 Open path For Binary As #n
 l = LOF(n)
 s = String(l, vbNullChar)
 Get n, , s
 Close #n
 LoadTextFile = s
End Function

Private Sub SaveToFile(Data$, PathFile As String)
'Сохранение переменной в файл
   n = FreeFile
   Open PathFile For Binary As #n
   Put n, , Data$
   Close #n
End Sub
 
Private Function WordInString(strData As String, Word As String) As Boolean
'Проверка есть ли в строке слово
s$ = Replace(strData, Word, "ђWordђ";)
If s$ = strData Then
WordInString = False
Else
WordInString = True
End If
End Function

Ответить

Номер ответа: 9
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #9 Добавлено: 02.06.05 13:31
чуть подправиш, там я ход выполнение в форме3 высчитывал и выводил, так что удали... Пользоваться элементарно:

Объявляешь, типа
Dim ASCII_Method As New ASCII_Method

ну или как так его обозвёшь

потому если надо закодиовать
Text1 = ASCII_Method.EncodeData("то что кодируем",inHex)

там где InHex, если True то закодирует в hex через пробел, если False то в ASCII. Все функции прокоментированы и протестированы, юзай!

Ответить

Номер ответа: 10
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #10
Добавлено: 02.06.05 17:55

    If Mid(Data, pos, 1) = Left(vbNewLine, 1) Then

 Очень интересная строка :)
 Свидетельствует о богатом воображении ;)

Ответить

Номер ответа: 11
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #11
Добавлено: 02.06.05 18:01
 Да и потом, ты же работаешь с байтам, так зачем тогда грузить файл в строку, а потом вычленять байты с помощью Asc(Mid(Data, pos, 1))?
 Загрузи в байтовый массив и работай с ним. А если понадобится в строчном представлении, то используй StrConv(Строка,VbUnicode).

Ответить

Номер ответа: 12
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #12 Добавлено: 02.06.05 19:15
If Mid(Data, pos, 1) = Left(vbNewLine, 1) Then


Да знаю глупость, просто когда забыл что новая строка из двух символов состоит, я думал это просто 13, а оно 10 и 13, и чтоб не разбираться взял отрезал и зашибись :) Кому надо перепишут, мне влом уже лезть в этот класс, я его хрен знает когда писал.
Что касается байтового массива, можно, но так вроде проще. И ещё большое НО, почти весь код нужен был как на висуал басиске, так и на кубасике, а в нём (Строка,VbUnicode) нема :) так шо я выбрал строку...

Ответить

Номер ответа: 13
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #13
Добавлено: 03.06.05 10:17
 Не 10 и 13, а 13 и 10 вообщето. Больше коментариеве нет, потому как отмазки у тебя - не придерёшься ;) Разве что посоветую заменить на VbCr или Chr$(13)
 А вот по поводу QB я что то сильно сомневаюсь что этот код заработает. Все эти MID, LEFT и т.д.

 А вообще VB-шный код может работать только в VB.
 Посмотри к примеру что я написал:

 ;Dim NextBit As Byte
 Bin1 = LTrim$(NextBit) & Bin1

 Любой другой Бейсик прийдёт в неистовство если я попробую применить LTrim$ к переменной типа Byte или не укажу знак $ в имени функции. А в VB пожалуйста, пиши что хочешь, а то что тебе лень думать он сам исправит.

Ответить

Номер ответа: 14
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #14 Добавлено: 03.06.05 15:40
под Куб я его пол часа редактировал :) Именно этот 100% рабочий в ВБ, тестированый, кому наривится юзайте, не нравится пишите сами, что я ещё могу посоветовать?

Ответить

Номер ответа: 15
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #15
Добавлено: 03.06.05 16:15
 Ты по моему ему вообще левандос какой то посоветовал. Что делает твой гигантский класс? Если выкинуть весь мусор, то он извращённым способом выполняет в цикле CHR$(кодирование) и ASC(декодирование). Иными словами ты переводишь символ в его ASCII-код и обратно.
 А в вопросе спрашивалось:

передать двоичный код файла в текстовое поле(10011001)

 Вопрос конечно не блестящий и термин "двоичный код файла" я встречаю впервые. Но поясняющая в скобках комбинация из 8 нулей и единиц наводит на частичный вывод о том что человеку нужно преобразовать число типа Byte из десятичной в двоичную систему.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам