Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Power Basic

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

 

  Вопрос: Простите за ламерский вопрос, но очень нужно уз... Добавлено: 11.03.04 18:23  

Автор вопроса:  Кто-то

Ответить

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

Номер ответа: 16
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #16
Добавлено: 16.03.04 03:07

 И бред этот с LSet не используй. Сам Микрософт в MSDN'е не рекомендует его для копирования пользовательских типов.

Warning   Using LSet to copy a variable of one user-defined type into a variable of a different user-defined type is not recommended.

Сразу поясню что делает ф-я.

Long - это двойное слово (DWORD), только со знаком.

Т.к. это двойное слово, то его разрядность 32 бита (4 байта).

Для доступа к каждому байту двойного слова можно использовать указатели (их нет в VB).

Объявляется указатель на Байт (b as Byte PTR), а для доступа к конкретному байту номер его указывается в квадратных скобках.

Например b[0] - первый байт. Т.к. указатель - это адрес, то для получения значения по нему в PB нужно перед указателем подставить собаку: @b[0] - значение первого байта.

Ответить

Номер ответа: 17
Автор ответа:
 Кто-то



Вопросов: 3
Ответов: 12
 Профиль | | #17 Добавлено: 16.03.04 06:53

Не надо ругаться. Действительно, последнее, что мне пришлось программировать за последние несколько лет - это микроконтроллеры разных производителей, причем большая часть программ писалась в машинных кодах. С языками высокого уровня как-то всё не складывалось. Наверное поэтому мне гораздо понятней тонкий механизм побитной передачи, чем компактные, но туго закрученные конструкции. Термин "Восьмибитное слово" я употребил совершенно сознательно - поскольку с кишками IBM PC особо не разбираясь, я полагал, что здесь используются 32-разрядные слова - т.е. 16-разрядные байты. Отсюда как мне назвать 8 бит информации? Полубайтом? Я и предпочел термин "Восьмиразрядное слово" мог бы употребить "Два четырех битных байта" или "Четыре двухбитных байта" - вопрос для меня скорее терминологический - поскольку мне приходилось сталкиваться с программируемыми устройствами самой разной разрядности в том числе и самой экзотической, я как-то не склонен считать терминологию IBM единственно верной. Ну и напоследок. Тупая, но ясная конструкция которую я создал совершенно самостоятельно на 4-й день знакомства с языком высокого уровня:

...

LOCAL ip11 AS STRING

LOCAL ip12 AS STRING

LOCAL ip13 AS STRING

LOCAL ip14 AS STRING

LOCAL ip_txt AS STRING

LOCAL hostname AS STRING

LOCAL ip11_num AS BYTE

LOCAL ip12_num AS BYTE

LOCAL ip13_num AS BYTE

LOCAL ip14_num AS BYTE

LOCAL ip AS LONG

ip11="192" 'Для примера IP адрес 192.168.1.1

ip11_num=VAL(ip11)

ip12="168"

ip12_num=VAL(ip12)

ip13="1"

ip13_num=VAL(ip13)

ip14="1"

ip14_num=VAL(ip14)

ip11=BIN$(ip11_num)

ip11=RIGHT$("0000000"+ip11,8)

ip12=BIN$(ip12_num)

ip12=RIGHT$("0000000"+ip12,8)

ip13=BIN$(ip13_num)

ip13=RIGHT$("0000000"+ip13,8)

ip14=BIN$(ip14_num)

ip14=RIGHT$("0000000"+ip14,8)

ip_txt = ip14+ip13+ip12+ip11

ip=VAL("&B"+ip_txt)

HOST NAME ip TO hostname

...

конечно далеко не оптимальна по стилю, но работает безотказно и довольно быстро. Вот такого простого и ясного механизма я и добивался, и никто не мог мне его показать. Все снобски показывали навороченные листинги, от которых мало проку в плане понимания самого механизма передачи IP адреса. Я не умник, поэтому и задаю здесь вопросы. На мой последний (пока) вопрос касательно использования системных команд пока нет ответа - жду пока меня опять обзовут маразматиком и т.п. Может кто-нибудь всё-таки что-нибудь знает. Заранее спасибо сочуствующим за терпение и дельные ответы касающиеся программирования на PB вообще. :)))

Ответить

Номер ответа: 18
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #18
Добавлено: 16.03.04 09:20
 Странный вы какой то. Пришли в чужой монастырь со своим уставом и ещё и недовольны исходником от разработчика PB.
 Не знаю чтоты там где употреблял, но в х86 (начиная с 16-разрядных процессоров 8086) слово состовляет 16 бит.
 В 32-битных процессорах (начиная с 80386 и заканчивая P4) и AMD x86/64 тоже.
 Короче у всех процессоров класса х86 длина слова состовляет 16 бит.
---
 8-ми битное слово может быть только у 8-ми разрядных процессоров. Таких как, например, Z-80.
 Но Байт всегда составляет 8 Бит и никогда не зависит от длины Слова. Этому ещё в школе учили.
---
 > "Два четырех битных байта" или "Четыре двухбитных байта"
 - Такого в природе не существует.
---
 > большая часть программ писалась в машинных кодах. 
 Судя по твоим высказываниям в машинных кодах писалось 100% всех твоих программ.
 Похоже хрень с указателями слишком сложна для тебя.
 В машинных кодах тебе не могу розъяснить т.к. не помню наизусть кодов операций процессора.
 Могу объяснить на человеческом языке.
 Вычисление адреса переменной в памяти
 b = VarPtr(ip). В языке Ассемблера эту операцию выполняет команда "LEA Регистр(или метка)".
 Получение части переменной
 FirsByte? = @b[0]. В языке Ассемблера это можно представить как "MOV Регистр, BYTE PTR Переменная"
---
 > Тупая, но ясная конструкция которую я создал
 - Действительно абсолютна тупая конструкция и лишний расход памяти - ты объявил аж 11 переменных.
 Такой стиль программирования характерен для программирования на VB.
 Переходи лучше на него если ты решил начать знакомство с ЯВУ с БЕЙСИКа. Кстати правильно сделал.
 Power Basic - это профессиональный язык программирования.
 Для полноценного программирования на на нём желательно знать АСМ или Си.
 Хотя на уровне VB им тоже можно пользоваться. В этом случае ты будешь использовать его не на полную мощность.
---
 > Все снобски показывали навороченные листинги, от которых мало проку в плане понимания самого механизма передачи IP адреса
 - Если ты заметил то диапазон всех адресов от 0 до 255. Всего может быть 4 подадреса.
   Простым умозаключением можно понять раз диапазон подадреса(ну не знаю я как это называется) 0-255, значит это Байт.
   Раз "подадресов" 4 (255.255.255.255) значит полная длина адреса 4 Байта (или 32 бита).
   Вот и извлекай эти байты для получения нужного подадреса.
   В адресе 192.168.1.1: "192" - 1-й Байт, "168" - 2-й, "1","1" - 3-й и 4-й соответственно.

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #19
Добавлено: 16.03.04 13:34

2Кто-то: о 8-битном слове - желательно использовать терминологию используемой платформы.

Если ты действительно программируешь на машинных кодах микроконтроллеры, неужели для тебя новость, что в 4-байтовом целом обртный порядок байтов, а в строке - прямой? Ведь в этом и заключался ответ на твой вопрос.

Твой код выглядит ужасно, другие листинги тоже не очень, но разве мой код огромный (3 строки из которых одна - вывод мсгбокса?)

Ответить

Номер ответа: 20
Автор ответа:
 Кто-то



Вопросов: 3
Ответов: 12
 Профиль | | #20 Добавлено: 16.03.04 16:09

Друзья мои! Можете ещё сколько угодно обзывать меня[sensored]ои, ламером, "странным" и "умником", я не обижаюсь, поскольку являюсь учеником в этом деле. Я учусь и терплю побои как и положено ученику :))). Сделаю только одно ехидное замечание.

Определение байта согласно стандарту ANSI/ISO C99 (http://mrst.narod.ru/c-cpp/iso_iec_9899-1999_c99_language_standard.pdf) -

...

3.4

[#1] byte

addressable unit of data storage large enough to hold any

member of the basic character set of the execution

environment

[#2] NOTE 1 It is possible to express the address of each

individual byte of an object uniquely.

[#3] NOTE 2 A byte is composed of a contiguous sequence of

bits, the number of which is implementation-defined. The

least significant bit is called the low-order bit; the most

significant bit is called the high-order bit.

Где-нибудь присутствует цифра 8? Байт может иметь ЛЮБУЮ длину. На этом и основана мультиплатформенность разрабатываемого ПО. Вообще слово BYTE первоначально использовалось для определения совокупности бит, необходимых для печати символа. Помните матричные принтеры? Длина байта для внутренней архитектуры x86 определена как 8 - с этим я совершенно согласен и ставлю эту икону в свой иконостас :))) Хотя иная разрядность байта используется и в нынешнее время на IBM машинах, например для работы по протоколу x.25. Как вам такой скрипт из Dial-Up scripting language for Dial-Up Networking scripting supports:

SET PORT DATATBITS 5|6|7|8

Изменяет КОЛИЧЕСТВО БИТ в БАЙТАХ, пересылаемых и получаемых во время сессии.

Могу привести ещё массу примеров, когда байт не равен 8-ми битам. Так, что не надо ЛЯ-ЛЯ.

Я не лезу со своим уставом в чужой монастырь, просто кроме IBM PC я много разных платформ видел, в том числе и 4-х и 5-ти битных в начале 80-х годов 20 века. А вы воспринимаете это как покушение на незыблемые ценности. Сорри. Всё же кто-нибудь подскажет мне как из PB вызвать системную команду net send {hostname} [message]?

ЗЫ про порядок чтения бит в байте я в курсе. Особенность IP адресации как раз в том и состоит, что справа налево читаются не только биты, но и байты в двойном слове IP адреса.

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #21
Добавлено: 16.03.04 17:05

А что, вот так уже не получается ?

Shell "net send" & sName & sText

На VB форуме сечас осуждалось то же самое...

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #22
Добавлено: 16.03.04 18:57

Про байт я ничего не говорил. И вообще, если говорить о байтах, байты памяти IBM PC и многих других состоят из 9 бит, а не из 8, что можно прочитать в Абеле - 8 битов данных и 1 бит контроля четности. Кроме того, бит не обязательно должен иметь 2 состояния, в СССР была разработана ЭВМ на троичной системе, а в 40-х годах появлялись устройства на 10-чной системе счисления. Так что давайте не проводить конкурса умников и умниц (все равно ж я выиграю :D (а потом умру от скромности)).

> SET PORT DATATBITS 5|6|7|8

Ты невнимателен. Он устанавливает количество БИТОВ ПЕРЕДАВАЕЫХ ДАННЫХ на один байт, который как и прежде равен 8 битам данных. Остальные 3/2/1/0 бита используются для контроля целостности этих самых передаваемых данных.

Ответить

Номер ответа: 23
Автор ответа:
 Кто-то



Вопросов: 3
Ответов: 12
 Профиль | | #23 Добавлено: 17.03.04 05:56

За SHELL гигантское спасибо, эту команду я проглядел в хелпе :)))

Ответить

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

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



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