Страница: 1 |
Вопрос: Помогите двоичный код. | Добавлено: 01.06.05 08:01 |
Автор вопроса: ![]() |
Как открыть файл в двоичном виде, передать двоичный код файла в текстовое поле(10011001)(без Ansi, чтобы мог открыть любой файл), а по нажатию кнопки записать (может через Put?) двоичный код в файл? Нужно очень!!!Нужно срочно, горю!!! Заранее благодарен. |
Ответы | Всего ответов: 15 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 01.06.05 10:58 |
Просто это сделать не получится. Нужно на входе переводить двоичные данные в строку, а на выходе обратно. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик 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 Автор ответа: ![]() ![]() Вопросов: 5 Ответов: 12 |
Профиль | Цитата | #3 | Добавлено: 02.06.05 12:42 |
Спасибо! А как считать в двоичном виде не подскажешь? Без Ansi чтобы мог читать картинки, звук и т.д. Если не знаешь то подскажи плиз хотя бы как из обычного перевести в двоичный, что-то я там не то делаю. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик 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 ![]() NextBit = NextBit + 1 Next BitCounter End Function Private Sub Form_Load() MsgBox Hex$(Dec1(Bin1(&HF0))) End Sub |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 02.06.05 13:18 |
Т.е. обратно в десятичную. |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик 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 ![]() ![]() Next pos Else For pos = 1 To Len(Data) 'Проверяем на символ перехода на новую строку If Mid(Data, pos, 1) = Left(vbNewLine, 1) Then ![]() Else ![]() End If Next pos End If ext: If Right(DataToNum, 1) = " " Then DataToNum = Left(DataToNum, Len(DataToNum) - 1) End Function |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик 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) ![]() 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 ![]() ![]() 'Высчитывание в процентном соотнешении ход работы и прорисовка прогресбара на форме 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 ![]() Else ![]() 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #10 | Добавлено: 02.06.05 17:55 |
If Mid(Data, pos, 1) = Left(vbNewLine, 1) Then Очень интересная строка ![]() Свидетельствует о богатом воображении ![]() |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #11 | Добавлено: 02.06.05 18:01 |
Да и потом, ты же работаешь с байтам, так зачем тогда грузить файл в строку, а потом вычленять байты с помощью Asc(Mid(Data, pos, 1))?
Загрузи в байтовый массив и работай с ним. А если понадобится в строчном представлении, то используй StrConv(Строка,VbUnicode). |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #12 | Добавлено: 02.06.05 19:15 |
If Mid(Data, pos, 1) = Left(vbNewLine, 1) Then
Да знаю глупость, просто когда забыл что новая строка из двух символов состоит, я думал это просто 13, а оно 10 и 13, и чтоб не разбираться взял отрезал и зашибись ![]() Что касается байтового массива, можно, но так вроде проще. И ещё большое НО, почти весь код нужен был как на висуал басиске, так и на кубасике, а в нём (Строка,VbUnicode) нема ![]() |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #13 | Добавлено: 03.06.05 10:17 |
Не 10 и 13, а 13 и 10 вообщето. Больше коментариеве нет, потому как отмазки у тебя - не придерёшься ![]() А вот по поводу QB я что то сильно сомневаюсь что этот код заработает. Все эти MID, LEFT и т.д. А вообще VB-шный код может работать только в VB. Посмотри к примеру что я написал: ![]() Bin1 = LTrim$(NextBit) & Bin1 Любой другой Бейсик прийдёт в неистовство если я попробую применить LTrim$ к переменной типа Byte или не укажу знак $ в имени функции. А в VB пожалуйста, пиши что хочешь, а то что тебе лень думать он сам исправит. |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client Вопросов: 236 Ответов: 8362 |
Профиль | Цитата | #14 | Добавлено: 03.06.05 15:40 |
под Куб я его пол часа редактировал ![]() |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #15 | Добавлено: 03.06.05 16:15 |
Ты по моему ему вообще левандос какой то посоветовал. Что делает твой гигантский класс? Если выкинуть весь мусор, то он извращённым способом выполняет в цикле CHR$(кодирование) и ASC(декодирование). Иными словами ты переводишь символ в его ASCII-код и обратно.
А в вопросе спрашивалось: передать двоичный код файла в текстовое поле(10011001) Вопрос конечно не блестящий и термин "двоичный код файла" я встречаю впервые. Но поясняющая в скобках комбинация из 8 нулей и единиц наводит на частичный вывод о том что человеку нужно преобразовать число типа Byte из десятичной в двоичную систему. |
Страница: 1 |
|