Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 |

 

  Вопрос: Новое сообщение без темы Добавлено: 29.10.04 11:24  

Автор вопроса:  LamerOnLine | ICQ: 334781088 

subject=Массив из строки

Проблема - есть строка в Unicode, которая содержит несколько vbNullChar. Мне
нужно ее перегнать в массив типа Byte. Как это сделать побыстрее (то есть не
циклами). АПИ в основном работают с null-terminated strings, посему тут не
годятся. Как?

Ответить

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

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 29.10.04 12:59
Вообще-то и АПИ сгодятся, если помучать декларации, а VB средство, попробуй так:

bt() = StrConv(strUnicode, vbFromUnicode)

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #2 Добавлено: 29.10.04 14:38
Sne, это не рулит. Я же говорю, строка - набор NTS. StrConv и многие API
оставляют лишь первую из них.

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 29.10.04 15:13
может помочь написать ассемблерную вставку?

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 29.10.04 15:14
ЗЫ (забыл)

Быстрей этого уже все-равно не получится ;)

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 31.10.04 00:24
 А CopyMemory???

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 31.10.04 00:35
а смысл, там же все-равно нулевый байты останутся :(

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #7
Добавлено: 31.10.04 03:55
Да уж, оно тут совсем никак :)

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #8
Добавлено: 31.10.04 03:58
Тогда на АСМ-е. Оно конечно некрасиво будет смотреться в VB, зато очень быстро.

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #9
Добавлено: 31.10.04 05:13
Попробуй такое:

Private Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" ( _
     ByVal lpPrevWndFunc As Long, _
     ByVal hwnd As Long, _
     ByVal msg As Long, _
     ByVal wParam As Long, _
     ByVal lParam As Long) As Long

Dim StrConv2() As Byte

Sub Hex2Bin2(ByRef Source As String, ByRef Destination() As Byte)
 ReDim Destination(Len(Source) \ 2)
 Dim Convert As Long, DstCounter As Long
 For Convert = 1 To Len(Source) Step 2
  ;Destination(DstCounter) = Val("&H" & Mid$(Source, Convert, 2))
  ;DstCounter = DstCounter + 1
 Next Convert
End Sub

Private Sub Form_Click()
 Dim a As String, b() As Byte
 a = "Hello World!"
 ReDim b(Len(a) + 1)
 CallWindowProc VarPtr(StrConv2(0)), StrPtr(a), Len(a), VarPtr(b(0)), 0
 MsgBox StrConv(b(), vbUnicode)
End Sub

Private Sub Form_Load()
Const HexCode As String = "5589E553565781EC0C0000008B75088B7D108B4D0C668B0688" & _
                        "0781C602000000FFC7FFC981F9000000000F8405000000E9E0" & _
                        "FFFFFF9089EC81EC0C0000005F5E5B5DC21000"
Hex2Bin2 HexCode, StrConv2
End Sub

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #10
Добавлено: 31.10.04 05:19
Если захочешь подправить, то вот исходник для LocASM:

const Source equ ebp+8
const SrcLen equ ebp+12
Const Dst equ ebp+16

MOV esi,[Source]
mov edi,[Dst]
mov ecx,[SrcLen]

Copy:
MOV ax,[esi]
mov [edi],al
add esi,2
inc edi
dec ecx
CMP ECX,0
JE Finish
jmp Copy

Finish:
nop

Ответить

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



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #11
Добавлено: 31.10.04 10:13
ЗАчем?В Unicode NullString не играют никакой роли, это в ASCII нужно париться с такой фигней!
Dim a As String
a = "a" & vbNullString & "b"
Print StrConv(a, vbUnicode)

Ответить

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



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #12
Добавлено: 31.10.04 10:14
ой, глюк, в предыдущем примере замените vbNullString на vbNullChar. Юникод рулит!

Ответить

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



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #13
Добавлено: 31.10.04 10:18
сори, сори...Невнимательно прочёл вопрос. Внатуре, когда без цикла переводишь, то режет по vbNullChar

Ответить

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



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #14
Добавлено: 31.10.04 10:20
хотя....нэ!SNE был прав, эго код работает хорошо..
Dim a As String
Dim c() As Byte
a = "a" & vbNullChar & "b" & vbNullChar & "c"
c() = StrConv(a, vbFromUnicode)
MsgBox Chr(c(4))

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #15
Добавлено: 31.10.04 23:55
о тожж... бывают чудеса :)

Ответить

Страница: 1 | 2 |

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



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