Нулевой код в бинарных файлах

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Нулевой код в бинарных файлах

Сообщение Sirik » 19.02.2005 (Сб) 15:34

Читаю бинарный файл, причём нулевой символ втречается с частотой в 2 раза чаще, чем любой другой.
Что вобще означает этот нулевой символ? Может какой-то разделитель ?

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

Сообщение tyomitch » 19.02.2005 (Сб) 15:45

Может быть. А что за файл-то?
"Стандартного" значения у нулевого символа нет.
Изображение

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 19.02.2005 (Сб) 15:49

Например вот этот:

ЗЫ. первые четыре читаемые, потом шеть нет. какие у них кодах?
Вложения
1.zip
(140 байт) Скачиваний: 24
Последний раз редактировалось Sirik 19.02.2005 (Сб) 15:52, всего редактировалось 1 раз.

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

Сообщение tyomitch » 19.02.2005 (Сб) 15:51

В нём нулевой символ, очевидно, обозначает чёрную точку :-D
Изображение

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 19.02.2005 (Сб) 15:54

я читаю файл побуквенно.
после первых 4 символом, получаеться 6 неизвестных символом и моя программа принимает их как нулевые.
а действительно какой у них, если не ноль?

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

Сообщение tyomitch » 19.02.2005 (Сб) 15:57

Всё правильно, там нули. А противоречие где?
Изображение

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 19.02.2005 (Сб) 16:02

так вот я спрашиваю, действительно эти коды равняются нулю или нет?
значит всё-таки да.
спасибо

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 20.02.2005 (Вс) 1:30

А что, сложно открыть файл каким-нить hex-вьювером и посмотреть на реальные коды? :lol:
То, что для одних константа, для других только переменная...

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 20.02.2005 (Вс) 11:36

А что, и так не видно, что реальные коды нулевые? :?

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 20.02.2005 (Вс) 12:29

я понял, что коды нулевые.
определённому символу отвечает определённый код (например: A=65).
так вот интересно, какой символ отвечает 0 коду?
или это просто раздилитель какой-то?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 20.02.2005 (Вс) 12:40

Кажется, это символ конца строки:

Попробуй запустить
Код: Выделить всё
MsgBox "\_" & Chr(0) & "_/"

и будешь немного удивлён ;)

Никакого символа он не несёт, похоже...

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

Сообщение tyomitch » 20.02.2005 (Вс) 13:17

Это только в Сях он символ конца строки, и то не всегда.
В VB он не имеет отдельного смысла: попробуй
Код: Выделить всё
Debug.Print "\_" & Chr(0) & "_/"


2Sirik: кодам младше пробела (32) не соответствуют никакие символы.
Изображение

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 20.02.2005 (Вс) 22:14

Коды меньше 32 имеют значения. Как правило используются как управляющие символы. И то это зависит от файла. Например при интерпритации файла как текста 13 - перенос строки, 10 - перевод каретки и т.д.. В графических 0 может быть пикселем черного цвета. Думаю это и так всем известно...
То, что для одних константа, для других только переменная...

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 20.02.2005 (Вс) 22:15

tyomitch писал(а):2Sirik: кодам младше пробела (32) не соответствуют никакие символы.


Кодам младше пробела (32) не соответствуют никакие ASCII символы. Так вернее...

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

Сообщение tyomitch » 20.02.2005 (Вс) 22:19

Unicode тоже :-P
Изображение

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 21.02.2005 (Пн) 9:59

Ок, только что-то мне не совсем понятно следующее:
любой код можно предстваить в двоичном виде, т.е. в 8 бит.
Но 8 битами можно закодировать только 255 элементов, а с нулевым получается 256!!!
Это как понимать?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.02.2005 (Пн) 10:12

Это понимать так, что нумерация начинается с 0.
Напиши на листочке числа:
0, 1, 2, ... , 255
и посчитай их, загибая пальцы. Уверяю, будет 256 чисел.
Lasciate ogni speranza, voi ch'entrate.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 21.02.2005 (Пн) 10:16

2 alibek

Я понимаю что сумма от 0 до 255 = 256.
я о другом, получается что 0 код просто не кодируют вовсе? Если так, то вопрос решён

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.02.2005 (Пн) 10:24

Что значит не кодирует?
Под ASCII=0 подразумевается только то, что он представляет собой байт, численное значение которого равно 0. Символ, визуально его отображающий, может быть каким угодно, в том числе и отсутствием символа.
Lasciate ogni speranza, voi ch'entrate.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 21.02.2005 (Пн) 10:48

Дело в том что я сам пишу одну программу, так для собственного развития.
Придумал алгоритм шифровки символов, так мне не хватает одного бита, упёрся как раз в этот нулевой.
И помоёму знаю выход, просто оставлять нулевой код как он есть

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

Сообщение tyomitch » 21.02.2005 (Пн) 18:14

Sirik, все 256 символов совершенно равноправны.
Изображение

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 21.02.2005 (Пн) 21:28

А как байт, который в побитовом выражении выглядит как 00000000 (&H00) качественно отличается от байта 00011001 (&H19) по твоему? И какая разница между ними для алгоритма шифровки? :shock: По-моему тут что-то не то с твоим алгоритмом :lol:
То, что для одних константа, для других только переменная...

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 22.02.2005 (Вт) 9:36

мне кажется что проблемма не в алгоритме, а в моём былом понимании кодирования символов. но это всё в прошлом.
спасибо


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

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

Сейчас этот форум просматривают: Google-бот, Majestic-12 [Bot], Yandex-бот и гости: 149

    TopList