Вопрос № 148561: Здравствуйте! У меня вопрос такого плана: Мне необходимо ПОБИТНО прочитать файл и закодировать его таким образом: например, если БИТ1=0, 2-ой бит=1, 3-ий бит=0, то такая комбинация будет кодироваться буквой А, если другая, например, Б и т.д. Я хоч...
Вопрос № 148620: доброго дня эксперты. помогите с решением задачи по VBA Excel. Я составил небольшуюпрограмку Калькулятор, и хочу привязать вычисления к кнопке CB_ok, но программа
выдает ошибку, так как при нажатии на клавиши omB_min_Click(), ComB_mnoz_Click()...
Вопрос № 148.561
Здравствуйте! У меня вопрос такого плана: Мне необходимо ПОБИТНО прочитать файл и закодировать его таким образом: например, если БИТ1=0, 2-ой бит=1, 3-ий бит=0, то такая комбинация будет кодироваться буквой А, если другая, например, Б и т.д. Я хочу сделать 3-битное кодирование => у меня должно быть 8 комбинаций, каждой из которых будет соответствовать своя буква. Язык программирования: Visual Basic 6. ВОПРОС: как это реализовать ?
P.S. То, что надо открыть файл как бинарный я понял, а вот
что дальше... Большое спасибо!
Отправлен: 26.10.2008, 21:19
Вопрос задал: AkaProc (статус: 4-ый класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Furfurol
Здравствуйте, AkaProc! Это практически кодирование по Base64, ток там используется 6-ти битная база (вместо 3 как у Вас) Пример http://base.vingrad.ru/view/1969-Realizatsiya-algoritma-BASE64-na-VB
Ответ отправил: Furfurol (статус: 2-ой класс)
Ответ отправлен: 27.10.2008, 11:48
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 148561 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 4 Комментарий оценки: Спасибо за ответ. Я как раз задал этот вопрос потомучто мне надо обойтись БЕЗ BASE64 и других сторонних компонентов.
Отвечает: Владимир (C4tnt)
Здравствуйте, AkaProc!
Читайте из файла 3 байта в переменные: dim b[3] as byte
и потом расшифровывайте в триплеты таким образом: dim triplets[8] as byte
Если младший бит в файле идёт первым:
triplets[0] = (b[0] and 7) triplets[1] = (b[0] and 56) / 8 triplets[2] = (b[0] and 192) / 64 + (b[1] and 1)*4 triplets[3] = (b[1] and 14) / 2 triplets[4] = (b[1] and 112) / 16 triplets[5] = (b[1] and 128) / 128 + (b[2] and 3) * 2 triplets[6] = (b[2] and 28) / 4 triplets[7]
= (b[2] and 224) / 32
Если старший бит в файле идёт первым:
triplets[0] = (b[0] and 224) / 32 triplets[1] = (b[0] and 28) / 4 triplets[2] = (b[0] and 3) * 2 + (b[1] and 128)/128 triplets[3] = (b[1] and 112) / 16 triplets[4] = (b[1] and 14) / 2 triplets[5] = (b[1] and 1)*4 + (b[2] and 192)/64 triplets[6] = (b[2] and 56) / 8 triplets[7] = (b[2] and 7)
В triplets[n] хранятся трёхбитовые величины. 0 <= triplets[n] <= 7
--------- Теперь к нашим ответам осталось лишь найти вопросы
Ответ отправил: Владимир (C4tnt) (статус: 5-ый класс)
Ответ отправлен: 27.10.2008, 17:37
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 148561 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 148.620
доброго дня эксперты. помогите с решением задачи по VBA Excel. Я составил небольшуюпрограмку Калькулятор, и хочу привязать вычисления к кнопке CB_ok, но программа выдает ошибку, так как при нажатии на клавиши omB_min_Click(), ComB_mnoz_Click(), ComB_plus_Click(), ComB_razd_Click() она записывает данные на лист1, и если поле пустое тогда выдается ошибка. помогите упростить алгоритм. заранее благодарен.
Приложение:
Отправлен: 27.10.2008, 12:35
Вопрос задал: Алексий (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: PsySex
Здравствуйте, Алексий! Это происходит из за того, что пустое поле является как бы нулем... Т.е. например в ComB_razd_Click прога пытается делить на 0... Вообщем измените коды вычислений следующим образом
Код:
Private Sub ComB_razd_Click() If Val(pole.Text)<>0 then Лист1.Range("A4")
= pole.Text End If pole.Text = "" End Sub
Это защитит от неправильного ввода в поле.
--------- Bom Shankar!
Ответ отправил: PsySex (статус: Специалист)
Ответ отправлен: 29.10.2008, 11:31
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 148620 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает: Тесленко Евгений Алексеевич
Здравствуйте, Алексий! "простить алгоритм" арифметических операций не удастся. А попытаться упростить и обойти в коде деления на ноль, как писал PsySex, можно.
Код:
Private Sub CB_ok_Click()
If ComB_mnoz.Enabled Then pole.Text = Лист1.Range("A2") *
nmbFld
If nmbFld = 0 Then Exit Sub '!
If ComB_plus.Enabled Then pole.Text = Лист1.Range("A1") + nmbFld If ComB_min.Enabled Then pole.Text = Лист1.Range("A3") - nmbFld If ComB_razd.Enabled Then pole.Text = Лист1.Range("A4") / nmbFld End Sub Function nmbFld() As Double '! Dim s As String s = pole.Text If Not IsNumeric(s) Or Len(s) = 0 Then Else nmbFld = CDbl(s) End If End Function Private Sub CB1_Click() If nmbFld = 0 Then Exit Sub '! If ComB_plus.Enabled Then pole.Text = Лист1.Range("A1") + nmbFld End Sub Private Sub CB2_Click() If ComB_mnoz.Enabled Then pole.Text = Лист1.Range("A2") * nmbFld End Sub Private Sub CB3_Click() If nmbFld = 0 Then Exit Sub '! If ComB_min.Enabled Then pole.Text = Лист1.Range("A3") - nmbFld End Sub Private Sub CB4_Click() If nmbFld = 0 Then Exit
Sub '! If ComB_razd.Enabled Then pole.Text = Лист1.Range("A4") / nmbFld End Sub Private Sub ComB_cancel_Click() pole.Text = "" Лист1.Range("A1:A4") = "" End Sub
Private Sub ComB_min_Click() Лист1.Range("A3") = pole.Text pole.Text = "" End Sub Private Sub ComB_mnoz_Click() Лист1.Range("A2") = pole.Text pole.Text = "" End Sub Priva
te Sub ComB_plus_Click() Лист1.Range("A1") = pole.Text pole.Text = "" End Sub Private Sub ComB_razd_Click() Лист1.Range("A4") = pole.Text pole.Text = "" End Sub
Sub toFld(sVal$) '! pole.Text = pole.Text + sVal If pole.Text = "0" Then pole.Text = "0." End Sub Private Sub ComB_tck_Click() toFld "." End Sub Private Sub ComB0_Click() toFld "0" End Sub Private
Sub ComB1_Click() toFld "1" End Sub Private Sub ComB2_Click() toFld "2" End Sub Private Sub ComB3_Click() toFld "3" End Sub Private Sub ComB4_Click() toFld "4" End Sub Private Sub ComB5_Click() toFld "5" End Sub Private Sub ComB6_Click() toFld "6" End Sub Private Sub ComB7_Click() toFld "7" End Sub Private
Sub ComB8_Click() toFld "8" End Sub Private Sub ComB9_Click() toFld "9" End Sub Private Sub vixod_Click() Unload Me End Sub
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.