Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/154: Рейтинг темы: голосов - 154, средняя оценка - 4.95
Diaskop
1

Как выглядит нулевой байт?

26.01.2012, 13:30. Показов 28631. Ответов 36
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Масивы заканчиваются нулевым байтом "/0", это ясно - надо иметь признак конца, но ("/")= 0x2F и ("0")=0x30 , а это уже два байта.
Вопросы: 1. под "нулевым байтом" подразумевают два байта ?
2. если прочитать конец массива, увижу я 0x2F и 0x30?
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2012, 13:30
Ответы с готовыми решениями:

strstream (Как записать теперь в s нулевой байт 0, чтобы он не интерпретировался с частью строки?)
int main() { strstream s; s << "555"; cout << s.str() << endl; system("pause"); } ...

Конвертирование String в HEX теряется нулевой байт
Всем привет. :) Задача вроде простая но столкнулся с одной непоняткой. читаю MIB в стринг и...

Нулевой байт
Код читает массив hex байт и записывает текстовый файл, но почему то в конец файла дописываются...

нулевой байт !
Всем привет ! Вот собственно проблема - у меня есть обьект "Socket" и я отправляю клиенту...

36
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.01.2012, 13:36 2
Цитата Сообщение от Diaskop Посмотреть сообщение
Масивы заканчиваются нулевым байтом "/0", это ясно
Я такого не слышал.
0
13 / 13 / 0
Регистрация: 31.12.2011
Сообщений: 83
26.01.2012, 13:42 3
Массивы (обычные) ничем не заканчиваются. Массив символов с '\0' (именно одинарные) - строка в стиле C. А \ - спец. символ по-моему.
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.01.2012, 13:42 4
Цитата Сообщение от Diaskop Посмотреть сообщение
"/0"
Так то \0.
Цитата Сообщение от Diaskop Посмотреть сообщение
1. под "нулевым байтом" подразумевают два байта ?
2. если прочитать конец массива, увижу я 0x2F и 0x30?
Нет. Нет.

Вот для раздумий.
C
1
2
3
4
5
6
7
#include <stdio.h>
 
int main(void)
{
    printf("%d", '\0');
    return 0;
}
1
78 / 78 / 9
Регистрация: 26.12.2011
Сообщений: 217
26.01.2012, 13:54 5
Цитата Сообщение от Pavel.fromBy Посмотреть сообщение
А \ - спец. символ по-моему.
Да, это спец. символ.
Тем самым мы даем знать, что это не очередной символ, а уже конец файла.
Как-то не задавался этим вопросом, но думаю, что в конце будет стоять 0x30.
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.01.2012, 13:57 6
Цитата Сообщение от zelim Посмотреть сообщение
Как-то не задавался этим вопросом, но думаю, что в конце будет стоять 0x30.
Ага. Т.е. такая строка "1230567" при выводе будет отрубаться на "123"?
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.01.2012, 13:57 7
Цитата Сообщение от zelim Посмотреть сообщение
Тем самым мы даем знать, что это не очередной символ, а уже конец файла.
Что? А если так
C++
1
"wfde\t\n\tsaf\tsafssad"
Нет, Вы не правы.
0
6 / 6 / 1
Регистрация: 01.12.2010
Сообщений: 105
26.01.2012, 13:58 8
для раздумий лучше:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(void)
{
    char a[] = "abcd /0 123 \r\t\n \x78 \\ \0 ";
 
    for (unsigned int i = 0; i < sizeof(a)/sizeof(*a); i++)
       printf("a[%d] = 0x%02X \n", i, a[i]);
 
    return 0;
}
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.01.2012, 13:58 9
Цитата Сообщение от zelim Посмотреть сообщение
Как-то не задавался этим вопросом, но думаю, что в конце будет стоять 0x30.
нуль-терминал
C++
1
0 == '\0'
C++
1
NULL == 0x00
http://ru.wikipedia.org/wiki/%... 0%BA%D0%B0
0
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 134
26.01.2012, 14:00 10
Массив не чем не кончается. Это char кончается нулевым байтом, но можно прочитать и следующие, зная его номер. Пример:
Массив 0x11 0x77 0xff 0x00 0x2f 0x90
sizeof выдаст при этом 2. Но можно прочитать 0x90 с помощью [6] или 0x2f [5]
Нулевой байт - 0x00
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.01.2012, 14:00 11
Цитата Сообщение от Fusix Посмотреть сообщение
sizeof выдаст при этом 2.
Например?
0
78 / 78 / 9
Регистрация: 26.12.2011
Сообщений: 217
26.01.2012, 14:05 12
Цитата Сообщение от soon Посмотреть сообщение
Ага. Т.е. такая строка "1230567" при выводе будет отрубаться на "123"?
Я, вообще-то, имел ввиду, что нуль + '\' даст такой результат.
При чтении строки такого вида "123\0567" мы получим 123 - "остальное", т.е. то, что за '\0', считается мусором.

Цитата Сообщение от go Посмотреть сообщение
Что? А если так
Код C++
1
"wfde\t\n\tsaf\tsafssad"
Нет, Вы не правы.
А где здесь нуль-символ? Читайте меня внимательнее, я имел ввиду комбинацию, а не один слеш.
Придирка неудачна, я прав.

Добавлено через 1 минуту
Цитата Сообщение от zelim Посмотреть сообщение
Да, это спец. символ.
Тем самым мы даем знать, что это не очередной символ, а уже конец файла.
То есть то, что за слешем - уже не просто цифра ноль. Как-то так в общем.
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.01.2012, 14:07 13
zelim, сами же сказали
Цитата Сообщение от zelim Посмотреть сообщение
думаю, что в конце будет стоять 0x30.
Пост читайте весь. Мой пример был именно к этой фразе.
0
78 / 78 / 9
Регистрация: 26.12.2011
Сообщений: 217
26.01.2012, 14:08 14
Цитата Сообщение от Fusix Посмотреть сообщение
Массив не чем не кончается. Это char кончается нулевым байтом, но можно прочитать и следующие, зная его номер. Пример:
Массив 0x11 0x77 0xff 0x00 0x2f 0x90
sizeof выдаст при этом 2. Но можно прочитать 0x90 с помощью [6] или 0x2f [5]
Типичный пример того, как функция sizeof откидывает "мусор".
Так и любые другие функции при чтении массива ищут нуль-символ.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.01.2012, 14:11 15
zelim,
Цитата Сообщение от zelim Посмотреть сообщение
А \ - спец. символ по-моему.
Да, это спец. символ.
Тем самым мы даем знать, что это не очередной символ, а уже конец файла.
речь про 0 вообще не шла. Шла речь об '\'
Я Вам привел пример, что Вы в корне не правы...
Цитата Сообщение от zelim Посмотреть сообщение
При чтении строки такого вида "123\0567" мы получим 123 - "остальное", т.е. то, что за '\0', считается мусором.
А если так? http://liveworkspace.org/code/... 0dc7cc52dc
Цитата Сообщение от zelim Посмотреть сообщение
Типичный пример того, как функция sizeof откидывает "мусор".
Этот оператор возвращает размер выделенной памяти памяти... Почитали бы лучше что-нибудь.
0
78 / 78 / 9
Регистрация: 26.12.2011
Сообщений: 217
26.01.2012, 14:11 16
Цитата Сообщение от soon Посмотреть сообщение
zelim, сами же сказали

Пост читайте весь. Мой пример был именно к этой фразе.
Это уже своего рода предположение было Я же уточнил, что этим не интересовался и в подробности не вникал ))
Не подумал даже как-то над примером.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.01.2012, 14:12 17
Цитата Сообщение от Diaskop Посмотреть сообщение
Масивы заканчиваются нулевым байтом "/0", это ясно - надо иметь признак конца, но ("/")= 0x2F и ("0")=0x30 , а это уже два байта.
Во-первых не "/", а "\", а во вторых это просто спецсимвол, терминальный байт действительно нулевой, то есть 0x00.
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
26.01.2012, 14:12 18
Не, пример корявый был в #15
C
1
2
3
4
5
6
7
8
#include <stdio.h>
 
int main(void)
{
    char str[] = "0123\0 67";
    printf("%d\n", sizeof(str));
    return 0;
}
http://liveworkspace.org/code/... 32950ce01d
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.01.2012, 14:15 19
Цитата Сообщение от zelim Посмотреть сообщение
Как-то не задавался этим вопросом, но думаю, что в конце будет стоять 0x30.
Нет. Если без слеша, то было бы 0x30, но слеш даже среди спецсимволов особый, он включает режим спецсимола для следующего и его код меняется. Например, t получает код 0x08, а но - код 0x00.
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
26.01.2012, 14:15 20
Ой-вей http://ru.wikipedia.org/wiki/%... 0%BE%D0%B2
0
26.01.2012, 14:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2012, 14:15
Помогаю со студенческими работами здесь

Если команда состоит из двух байт, то как прописать каждый байт отдельно?
Если команда состоит из двух байт , то как прописать каждый байт отдельно? Например , нужно...

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

Как вывести 10 байт после определенных байт из файла
Здравствуйте. Есть к примеру файл с расширением *.bin, подскажите как реализовать вывод на экран 12...

Как написать на masm под х86 функцию поиска кол-ва вхождений последовательности байт в большом массиве байт?
Привет! В общем читаю я файл (большой) и хочу найти кол-во вхождений в этот файл некоторой...

Как использовать функцию, выдающую через переменную типа байт результат, объём которого больше, чем байт?
Есть сканер отпечатков. Для него есть компонент ActiveX. У этого компонента есть функции. Среди них...

А можно сделать так (разбить как нибудь или запятые вставить ), чтобы было не 8998989 байт, а 8,998,989 байт ?
Кстати, вот еще вопрос... В переменной (например, filesize) хранится размер файла. При выводе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru