Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Integer Добавлено: 03.05.07 23:18  

Автор вопроса:  Gogic
Как преобразовать бинарный массив (Byte) в массив интеджеров (2-байтовый), размерность которого будет соответственно в 2 раза меньше?

Ответить

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

Номер ответа: 1
Автор ответа:
 intel-DX



ICQ: 445091742 

Вопросов: 4
Ответов: 169
 Профиль | | #1 Добавлено: 03.05.07 23:33
Это делается через указатели, ну я толком не знаю как ими пользоватся.

Ответить

Номер ответа: 2
Автор ответа:
 intel-DX



ICQ: 445091742 

Вопросов: 4
Ответов: 169
 Профиль | | #2 Добавлено: 03.05.07 23:56
Ураааааа работает!!! Хотя я за основу взял чужой код но я его доделал для твойей задачи

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private Sub Command1_Click()
Dim a(1 To 20) As Byte
Dim b(1 To 10) As Integer
a(20) = &HFF
CopyMemory ByVal VarPtr(b(1)), ByVal VarPtr(a(1)), 20 ' 20 = razmer masiva v bajrax
MsgBox b(10)
End Sub

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 04.05.07 00:08
Нуу, есть два метода - прямой и извратный.
1) Скопимеморить байтовый массив в интовый
2) Создать пустой интовый массив, а затем в его структуре SAFEARRAY подменить указатель на данные и размерности

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 04.05.07 03:21
имхо intel-DX не умеет брать указатель массива

http://www.vbnet.ru/articles/Showarticle.aspx?id=205
...Если применить VarPtr к элементу массива, то получим указатель на данные, а получить из него указатель на структуру SAFEARRAY нельзя...


Чтобы взять указатель на массив надо юзать
Declare Function ArrPtr Lib "msvbvm60" Alias "VarPtr" (arr() As Any) As Long

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #5 Добавлено: 04.05.07 04:03
хм.. :\ Или можно, и мне просто пора спать?

Ответить

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



ICQ: 249094859 

Вопросов: 0
Ответов: 310
 Профиль | | #6 Добавлено: 04.05.07 08:47
Можно и без VarPtr

CopyMemory b(1),a(1), 20


результат будет тот же, при условии, что CopyMemory объявлена как

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(pDst As Any, pSrc As Any, ByVal ByteLen As Long)

Ответить

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



Вопросов: 38
Ответов: 121
 Профиль | | #7 Добавлено: 04.05.07 18:17
Спасибо, работает и без объявления указателей, и с объявлением тоже работает.

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #8
Добавлено: 04.05.07 19:22
Тебе пора спать, банальному CopyMemory нужны только данные, а не SAFEARRAY :)

Ответить

Страница: 1 |

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



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