Страница: 1 |
Страница: 1 |
Вопрос: Помогите двоичный код.
Добавлено: 01.06.05 08:01
Автор вопроса: hak
Как открыть файл в двоичном виде, передать двоичный код файла в текстовое поле(10011001)(без Ansi, чтобы мог открыть любой файл), а по нажатию кнопки записать (может через Put?) двоичный код в файл? Нужно очень!!!Нужно срочно, горю!!! Заранее благодарен.
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #1
Добавлено: 01.06.05 10:58
Просто это сделать не получится. Нужно на входе переводить двоичные данные в строку, а на выходе обратно.
Номер ответа: 2
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 01.06.05 21:46
Открой в обычном, переведи в двоичный...
Text1 = stoka$
Непонял? А что если в анси то не любой?
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-сайт:
Профиль | | #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-сайт:
Профиль | | #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
 ec1 = 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-сайт:
Профиль | | #6
Добавлено: 02.06.05 13:18
Т.е. обратно в десятичную.
Номер ответа: 7
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #7
Добавлено: 02.06.05 13:22
Анси + умеет в хекс
'Для Кодирование данных
If inHex = False Then
For pos = 1 To Len(Data)
DoEvents
 ataToNum = 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
 ataToNum = DataToNum & Hex$(13) & " " ': pos = pos + 1
Else
 ataToNum = 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)
 ecodeFromFile = 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
 ataToNum = 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
 ataToNum = DataToNum & Hex$(13) & " " ': pos = pos + 1
Else
 ataToNum = 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-сайт:
Профиль | | #10
Добавлено: 02.06.05 17:55
If Mid(Data, pos, 1) = Left(vbNewLine, 1) Then
Очень интересная строка
Свидетельствует о богатом воображении
Номер ответа: 11
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #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
Да знаю глупость, просто когда забыл что новая строка из двух символов состоит, я думал это просто 13, а оно 10 и 13, и чтоб не разбираться взял отрезал и зашибись Кому надо перепишут, мне влом уже лезть в этот класс, я его хрен знает когда писал.
Что касается байтового массива, можно, но так вроде проще. И ещё большое НО, почти весь код нужен был как на висуал басиске, так и на кубасике, а в нём (Строка,VbUnicode) нема так шо я выбрал строку...
Номер ответа: 13
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #13
Добавлено: 03.06.05 10:17
Не 10 и 13, а 13 и 10 вообщето. Больше коментариеве нет, потому как отмазки у тебя - не придерёшься Разве что посоветую заменить на VbCr или Chr$(13)
А вот по поводу QB я что то сильно сомневаюсь что этот код заработает. Все эти MID, LEFT и т.д.
А вообще VB-шный код может работать только в VB.
Посмотри к примеру что я написал:
 im 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-сайт:
Профиль | | #15
Добавлено: 03.06.05 16:15
Ты по моему ему вообще левандос какой то посоветовал. Что делает твой гигантский класс? Если выкинуть весь мусор, то он извращённым способом выполняет в цикле CHR$(кодирование) и ASC(декодирование). Иными словами ты переводишь символ в его ASCII-код и обратно.
А в вопросе спрашивалось:
передать двоичный код файла в текстовое поле(10011001)
Вопрос конечно не блестящий и термин "двоичный код файла" я встречаю впервые. Но поясняющая в скобках комбинация из 8 нулей и единиц наводит на частичный вывод о том что человеку нужно преобразовать число типа Byte из десятичной в двоичную систему.