Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вопросы по символам


Автор: reCoder 5.10.2006, 20:30
Здраствуйте.
Очень интересует следующий вопрос.

В двоичном виде можно представить числа от 0 до 255. 
Рассмотрим внутринности EXE файла. Неужели там символы только из такого диапазона ?

Результат выполнения след. кода удевил, т.к. на екране увидел отрицательные числа и нули. 


Код
        char buf;
        ifstream file;
        file.open("file.exe");
        
        int i = 0;
        while (file.get(buf))
        {
         ++i;
         cout << (int )buf << "\n";
        }
        
        file.close();


Поясните пожалуйста

Автор: Daevaorn 5.10.2006, 20:39
Цитата(reCoder @  5.10.2006,  21:30 Найти цитируемый пост)
В двоичном виде можно представить числа от 0 до 255

Не совсем так. Это количество различных значений в одном байте, т.е. 2^8. Если взять допустим 2 байта и сказать, что они обозначают одно число, то получается 2^16, что уже больше 65 тысяч. И так далее.
Цитата(reCoder @  5.10.2006,  21:30 Найти цитируемый пост)
Результат выполнения след. кода удевил, т.к. на екране увидел отрицательные числа и нули. 

Ты читаешь по одному чару (1 байт), а выводишь на консоль преобразуя в int, котрый является знаковым целым из 4х байт (на 32х битной системе конечно)

Автор: reCoder 5.10.2006, 20:40
Немного ушли от вопроса.
Тоесть системы произвольно могут ставить символ не по одному байту, а по нескольким ?

Тоесть символов в ЕХЕ конечно больше чем 256 ?

Добавлено @ 20:46 
Цитата

Ты читаешь по одному чару (1 байт), а выводишь на консоль преобразуя в int, котрый является знаковым целым из 4х байт (на 32х битной системе конечно) 


Как тогда узнать номер этого символа, чтобы потом в двоичный вид ?

Автор: MAKCim 5.10.2006, 21:39
старший бит в char - знаковый
при преобразовании в int просходит заполнение битов старших 3-х байтов знаковым битом младшего байта
а так как int - тоже знаковый - оттого и отрицательные числа

Автор: reCoder 5.10.2006, 22:14
спасибо. понял  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)