Вопрос про Null символы внутри String переменных.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
dshavr
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 02.02.2008 (Сб) 14:16

Вопрос про Null символы внутри String переменных.

Сообщение dshavr » 02.02.2008 (Сб) 14:26

Добрый день.
Есть такая проблема, может кто подскажет ответ. Оcx компоненты типа Winsock или Mscomm32 принимают входящие данные в переменную типа String (особенно Winsock). При этом если чем-то передавалось 40 символов, один из которых был Null, в переменной будет только 39 символов, причем где был null не известно.
Таже история и с чтением из файла в переменную String. Если в файле записано несколько байтов и один байт равен "00", то при чтении его командой Line input a$ или просто Input a$, переменная "укоротится" на один символ.
Может кто знает, есть-ли методы узнать, где был null? Или может принять из Winsockа в массив байтов можно? Или перевести строку в массив как-то по-хитрому?
Заранее благодарен, Дмитрий.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 02.02.2008 (Сб) 21:30

А что это "чем-то"? И какие данные передаёт?

dshavr
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 02.02.2008 (Сб) 14:16

Сообщение dshavr » 03.02.2008 (Вс) 0:04

Я стараюсь подключить некоторую "железку", работающую с датчиками, к компьютеру через Ethernet. Там это не исключено. Но насколько я себе представляю, в принципе в IP пакетах очень часто могут содержаться нулевые байты...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 03.02.2008 (Вс) 0:30

Добрый день.
Есть такая проблема, может кто подскажет ответ. Оcx компоненты типа Winsock или Mscomm32 принимают входящие данные в переменную типа String (особенно Winsock). При этом если чем-то передавалось 40 символов, один из которых был Null, в переменной будет только 39 символов,

Проверял? Чем проверял? MsgBox-ом небось?

Таже история и с чтением из файла в переменную String. Если в файле записано несколько байтов и один байт равен "00", то при чтении его командой Line input a$ или просто Input a$, переменная "укоротится" на один символ.
Может кто знает, есть-ли методы узнать, где был null?

Вот неправильная постановка вопроса "может кто знает". Это не такая вещь, о которой знает редкое число людей.

Методы есть, для файлов это чтение с помощью Get в режиме binary, для Winsock-а методов нет, потому что насколько я помню, он всё передаёт правильно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 03.02.2008 (Вс) 12:35

А может быть, программа, которая работает с датчиками, что-либо неверно обрабатывает?

dshavr
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 02.02.2008 (Сб) 14:16

Сообщение dshavr » 04.02.2008 (Пн) 23:47

Все, спасибо, разобрался. Признаться, когда не получилось нормально считать переменную из файла с помощью input я решил, что строковые переменные не могут нормально содержать нулевые символы в принципе. Ошибался...

Да, длину смотрел msgbox-ом: msgbox len(a$), get не использовал для большей, как мне казалось, схожести чтения из файла с winsock-ом.

Спасибо за помощь.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35

    TopList