Hex2Bin Альтернативные способы.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Hex2Bin Альтернативные способы.

Сообщение xenomorph » 25.06.2006 (Вс) 23:14

Привет Всем!

Вопрос очень нетривиален.
Мне нужна процедура, которая из шестнадцатиричного дампа вида:
"6655668BEC ..."
Формирует бинарный файл.

Работающий код:
Код: Выделить всё
'-------------------------------------------------------------------------------------------
'Making the Binary Data:
Public Function MakeBinary(s_BinBuffer As String) As String
    Dim s_HexData As String
    Dim i As Long
    Do While Len(s_BinBuffer) <> 0
        s_HexData = s_HexData & Val(CInt("&H" & Left(s_BinBuffer, 2)))
        'Val ("&h" & Hex$(10))
        'If i = 10 Then Exit Function
        'Cutting:
        If Len(s_BinBuffer) <= 1 Then
            GoTo Finished
        End If
        s_BinBuffer = Right(s_BinBuffer, Len(s_BinBuffer) - 2)
    Loop
Finished:
    MakeBinary = s_HexData
    Exit Function
End Function
'-------------------------------------------------------------------------------------------


Этот код на 100% работает на Win32 платформе.
Запущеный же на эмуляторе под линуксом он вылетает на
исключении в:

Chr(X)

:-(.
Это ОЧЕНЬ Плохо.
Вылетает только тогда, Сhr возвращает непечатный символ. Судя-по всему это баг эмулятора.

Есь ли каке нибудь варианты перекодировать Hex2Bin?

Просьба коментарии по-существу!!!
--
Огромное спасибо заранее!
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 25.06.2006 (Вс) 23:24

xenomorph писал(а):Вопрос очень нетривиален.

Для неучей -- несомненно.

Код: Выделить всё
Public Function MakeBinary(s_BinBuffer As String) As String
    Dim i As Long, Bytes() As Byte
    If Len(s_BinBuffer) Mod 2 Then Error 5 Else ReDim Bytes(Len(s_BinBuffer) \ 2 - 1)
    For i = 0 To UBound(Bytes)
        Bytes(i) = Val("&H" & Mid(s_BinBuffer, 1 + i + i, 2))
    Next
    MakeBinary = StrConv(Bytes, vbUnicode)
End Function
Изображение

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Re.

Сообщение xenomorph » 25.06.2006 (Вс) 23:46

Вот теперь спасибо!

Чётко, понятно и по-делу!

Этот код:

1. На Win работает.
2. На Lin НЕ работает, но ошибку не показыет.

Пытаюсь понять прошла ли перекодировка ...
и в чём проблема ...

Код: Выделить всё
MakeBinary = StrConv(Bytes, vbUnicode)


Эта строчка обязательна?
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Сообщение xenomorph » 25.06.2006 (Вс) 23:47

MakeBinary = StrConv(Bytes, vbUnicode)


Без неё на Linux-e данные отображаються, но не корректно.

С ней - их нету.
Пытаюсь сообразить почему ...[/code]
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 25.06.2006 (Вс) 23:52

А так не сканает?
Код: Выделить всё
Public Function MakeBinary(s_BinBuffer As String) As Byte()
    Dim i As Long, Bytes() As Byte
    If Len(s_BinBuffer) Mod 2 Then Error 5 Else ReDim Bytes(Len(s_BinBuffer) \ 2 - 1)
    For i = 0 To UBound(Bytes)
        Bytes(i) = Val("&H" & Mid(s_BinBuffer, 1 + i + i, 2))
    Next
    MakeBinary = Bytes
End Function
Изображение

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Re:

Сообщение xenomorph » 26.06.2006 (Пн) 0:03

Так и сделал.
Прокатило Ж-).
--
Ей-богу =>
tyomitch Огромное спасибо!!!!!!!!
--
Если єта прога работать будет - я оюязательно
её постараюсь выложить - я её однавременно заставляю работать на 2 ОС ... - пока, тьфу-тьфу-тьфу успешно ...
Очень интересно смотреть как эмулятор Линукса интерпретирует файловую систему ...
Написал пару модулей для запуска ВБ под wine ...
Може кому ещё пригодиться.

Да заодно спрошу - это прога для восстановления пакетов из дампа Ethereal-a. Кто-нить слышал про аналоги?
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Сообщение xenomorph » 26.06.2006 (Пн) 0:34

Прокатило то оно прокотикло ...
Ему не нравиться буква "n"
Её везде покоцало :-).

Вот так выглядит Дамп полученый с пакета из под Линукса:

хєЗ ЏHSЏ E Ь ”@ Ђj2АЁ АЁ  P :ЈЖµФ*kИ•Ђ K 
џ‡ $6HTTP/1 1 200 OK
Date: Tue, 04 Ja 2005 22:07:28 GMT
Server: Apache/1 3 20 (Wi 32) PHP/4 0 6
Last-Modified: Tue, 04 Ja 2005 22:07:28 GMT
ETag: W/"0-4000-41db237b"
Accept-Ra ges: bytes
Co te t-Le gth: 16384
Keep-Alive: timeout=15, max=100
Co ectio : Keep-Alive
Co te t-Type: applicatio /octet-stream

MZђ   яя ё @ ё є ґ Н!ёLН!This program ca ot be ru i DOS mode

$ uџщЫ1 —€1 —€1 —€І ™€0 —€ Ь €0 —€Шљ€0 —€Rich1 —€ PE L {#ЫA    (  @      @  У       d ( 0 Ш (  t text °    ` data  @ А rsrc Ш 0  0 @ @ П:@ MSVBVM60 DLL


Та же программа но на Вин32:

ЏHSЏ
дхєЗ E …Gђ@ @pЌАЁ АЁ „ј PZц¬®).Ђґ‚Н 
±' GET /1.jpg HTTP/1.1
Connection: Keep-Alive
User-Agent: Mozilla/5.0 (compatible; Konqueror/3.3; Linux) KHTML/3.3.2 (like Gecko)
Accept: text/html, image/jpeg, image/png, text/*, image/*, */*
Accept-Encoding: x-gzip, x-deflate, gzip, deflate
Accept-Charset: iso-8859-1, utf-8;q=0.5, *;q=0.5
Accept-Language: en
Host: 192.168.0.1



думаю ...
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 26.06.2006 (Пн) 9:19

Не уверен, что подойдет, но все же:
http://bbs.vbstreets.ru/viewtopic.php?t=22495
Лучший способ понять что-то самому — объяснить это другому.

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Re:

Сообщение xenomorph » 26.06.2006 (Пн) 20:57

2 Antonariy:
1) спасибо.
2) ИМХО не покатит по определению -под Линухом КОМ-ки умирают не родившись. Я помню я грид захотел отобразить - тама такое началось :-)! Ж-)

2 Tyomitch:

Есть ли какой нибудь АПИ аналог:

StrConv(Bytes, vbUnicode)

т.е. не утилизировать функцию msvbvm?

Всё уже запустилось окромя этой процедуры перекодировки ...[/syntax]
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 26.06.2006 (Пн) 23:08

Под линухой:
Код: Выделить всё
func bin2str( buf input, str output )
{
   uint i
   
   fornum i, *input :  int2str( output, "%02X", input[i] )
}

func str2bin( str input, buf output )
{
   uint i cur
   str  stemp
   
   cur = input.ptr()
   for i, i < *input, i += 2
   {
      output += byte( str2int( "0x" += stemp.copy( cur + i, 2 ) ))
   }
}

func main<main>
{
   str fname output
   buf input temp
   
   input.read( getmodulename( fname ))
   bin2str( input, output )
   str2bin( output, temp )
   
   if temp != input : print( "Error!\n")
   else : print( "OK!\n")
   
   output.write( "output.txt" )     
//   temp.write( "output.bin" )     
   getch()
}
Только язык - Gentee :lol: ...
А я все практикую лечение травами...

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Re ///

Сообщение xenomorph » 26.06.2006 (Пн) 23:36

Нда ...
я ж вроде писал: "ПО СУЩЕСТВУ"...
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

альтернативные способы

Сообщение Twister » 26.06.2006 (Пн) 23:40

xenomorph писал(а):Нда ...
я ж вроде писал: "ПО СУЩЕСТВУ"...
Гм... А чем не по существу? Код 100% рабочий. :wink: В линуксе тоже.

ЗЫ - Название темы: "альтернативные способы". :)
А я все практикую лечение травами...

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Re:

Сообщение xenomorph » 27.06.2006 (Вт) 0:16

Это не ВБ.

tyomitch Вы где? На Вас последняя надежда ... !
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Yandex-бот и гости: 13

    TopList