Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 687
от 21.03.2007, 04:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 459, Экспертов: 51
В номере:Вопросов: 5, Ответов: 11


Вопрос № 78436: Здравствуйте! Каким способом можно получить номер символа (char) из таблицы ASC и записать его в переменную типа int Как програмно перевести число типа int из десятичной системы в двоичную?...
Вопрос № 78447: Прива! Как с помощью CFile считать постепенно в буфер и выводить на экран весь фаил, как заставить считывать фаил по кускам до конца и как вообще определить что начтупил конец фийла?!! ...
Вопрос № 78448: Всем экспертам привет. Вопрос такой, Каким образом использовать формат *.png в программе, какие есть компоненты. Прямые ссылки на статьи и примеры приветструются. ...
Вопрос № 78483: Здраствуйте! Подскажите пожалуйста, какой компилятор С/С++ нужно использовать что бы скомпилировать программу под биос. Тоесть что бы работа на уровне БИОСА, а не ОС. Может есть по этому делу какой-нибудь мануалчик....
Вопрос № 78491: Добрый вечер. У меня на повестке дня такой вопрос: как можно ограничить поле ввода в командной строке для пользователя. Пример: нужно,чтобы пользователь ввёл просто символ, хочу обезопасить программу от ввода строки....

Вопрос № 78.436
Здравствуйте!
Каким способом можно получить номер символа (char) из таблицы ASC и записать его в переменную типа int
Как програмно перевести число типа int из десятичной системы в двоичную?
Отправлен: 15.03.2007, 15:44
Вопрос задал: Tatarin (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: V1s0r
Здравствуйте, Tatarin!

Используй функцию из стандартной библиотеки itoa, которая передодит число в строку в указанной СС. Или возись с побитовыми операторами. Или можешь использовать std::bitset (поместить туда число, потом по индексам брать биты).
Думаю, это не все возможные способы :)
Синтаксис в любом справочнике по C/C++.

Насчёт первого вопроса не понял.
int a = 'ё'; // в "а" будет код "ё"
Ответ отправил: V1s0r (статус: 2-ой класс)
Ответ отправлен: 15.03.2007, 16:03
Оценка за ответ: 5

Отвечает: Ilkras
Здравствуйте, Tatarin!
Посмотреть очень просто. Правильно это будет выглядеть так:
// look through the ASCII table
int i;

for (i = 20; i< 128; i++)
printf("Character "%c" has value %d ", i, (int)i);

Далее. Число всегда хранится в двоичной форме. При распечатке можно представить его в десятичной. Чтобы точно знать как это делать надо почитать руководство. Руководство по функции printf() вам прекрасно поможет.
Ответ отправил: Ilkras (статус: 4-ый класс)
Ответ отправлен: 15.03.2007, 16:52
Оценка за ответ: 5

Отвечает: kool
Здравствуйте, Tatarin!
1)ASCII символ предсавлен своим кодом.
Т.е.

char a='A';
int cod_a;
cod_a=a;

2)
int b=0x8044,bb=b;
char *bit=new char[sizeof(int)*8];
memset(bit,'0',sizeof(int)*8);
for(int i=0;i for(int j=0;j<8;j++)
if((bb&(0x80>>j)))
bit[i*8+j]='1';
bb>>=8;
}
delete bit;
---------
I am.
Ответ отправил: kool (статус: Студент)
Ответ отправлен: 15.03.2007, 20:49

Отвечает: Thread
Здравствуйте, Tatarin!
Я уже много раз писал об этом, но не поленюсь написать еще разок). В С/С++ char - это не символ, это целочисленный тип, который как правило используется для хранения кодов символов. Т.е. можно использовать приведение типов:

char ch = 'q'; //Присвоим переменной ch код символа q
int code = (int) ch; //В переменной code будет код символа ch

Но можно написать без приведения типов:
char ch = 'q';
int code = ch;
Но я рекомендую использовать приведение типов, так как это на мой взгляд улучшает читабельность.

А можно прямо написать так:
int code = 'q';

По поводу Вашего второго вопроса ничего в голову не приходит, кроме как использовать классический алгоритм деления на 2 и с записью остатков. Здесь два момента:
1) Остаток от деления можно получить с помощью оператора %
2) Из массива символов "собрать" число можно сложив все элементы массива, умножив на 10 в степени позиция.

Приложение:

Ответ отправил: Thread (статус: 5-ый класс)
Ответ отправлен: 15.03.2007, 21:34

Отвечает: Evkwarrior
Здравствуйте, Tatarin!
Было приведено уже много ответов на вопрос, я добавлю свой.
Во-первых, запись
int a = 'g'; //(к примеру)
в общем случае неверная!!! int - это знаковый тип!
Возьмем, к примеру, букву "Б". Её код = 0xC1 = 11000001b = 193 (-63). А это отрицательное число!
После выполнения int a = 'Б'; a = -63 = 0xFFFFFFC1 (32-разрядная система).
Поэтому надо выполнять двойное явное приведение типов:
int a = (int) (unsigned char) 'Б';
Вот тогда a = 0x000000C1 = 193;

и вот мой вариант преобразования числа char в строку нулей и единичек:
char* CharToBinString (char val);
Пример: char *binary = CharToBinString ('G');
binary = "01000111"

Приложение:

---------
всё, что тебя не убъёт, сделает тебя сильнее

Ответ отправил: Evkwarrior (статус: 1-ый класс)
Ответ отправлен: 15.03.2007, 23:26


Вопрос № 78.447
Прива!
Как с помощью CFile считать постепенно в буфер и выводить на экран весь фаил, как заставить считывать фаил по кускам до конца и как вообще определить что начтупил конец фийла?!!
Отправлен: 15.03.2007, 17:08
Вопрос задал: Tatarin (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: DragonTusk
Здравствуйте, Tatarin!
Здравствуйте, Tatarin!
Размер файла:
DWORD GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh);
Ответ отправил: DragonTusk (статус: 3-ий класс)
Ответ отправлен: 16.03.2007, 00:28


Вопрос № 78.448
Всем экспертам привет. Вопрос такой,
Каким образом использовать формат *.png в программе, какие есть компоненты.
Прямые ссылки на статьи и примеры приветструются.
Отправлен: 15.03.2007, 17:12
Вопрос задал: Григорьеа Владимир Дмитриевич (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: V1s0r
Здравствуйте, Григорьеа Владимир Дмитриевич!

Поздравляю, вы выбрали отличный формат! :)

libPNG
Попробуйте в google: libPNG download (или что-то типа того)

Если вы программируете в Qt, то там встроенная поддержка чтения и записи PNG.
Ответ отправил: V1s0r (статус: 2-ой класс)
Ответ отправлен: 15.03.2007, 18:10


Вопрос № 78.483
Здраствуйте!
Подскажите пожалуйста, какой компилятор С/С++ нужно использовать что бы скомпилировать программу под биос. Тоесть что бы работа на уровне БИОСА, а не ОС.
Может есть по этому делу какой-нибудь мануалчик.
Отправлен: 15.03.2007, 22:09
Вопрос задал: chikanok (статус: 3-ий класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ilkras
Здравствуйте, chikanok!
здесь важен не компилятор, а библиотеки, с которыми линкуешься. runtime library. их надо искать для конкретного производителя биоса. с ними придут и хедеры.
в принципе, биос должен быть реализован без операционки, но тем не менее строить предположения о том какие библиотеки он пользует я бы не стал. (хотя попробовать stdlib можно)
Ответ отправил: Ilkras (статус: 4-ый класс)
Ответ отправлен: 15.03.2007, 22:34

Отвечает: Fenixk19
Здравствуйте, chikanok!
Впервый раз слышу, что на C/C++ можно писать на уровне биоса. Может я чего-то не знаю, но я всегда думал, что с биосом можно работать только посредством ассемблера. И что за такая странная надобность, если не секрет?
Ответ отправил: Fenixk19 (статус: 3-ий класс)
Ответ отправлен: 16.03.2007, 00:26


Вопрос № 78.491
Добрый вечер. У меня на повестке дня такой вопрос: как можно ограничить поле ввода в командной строке для пользователя. Пример: нужно,чтобы пользователь ввёл просто символ, хочу обезопасить программу от ввода строки.
Отправлен: 15.03.2007, 23:00
Вопрос задал: Griever (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Ilkras
Здравствуйте, Griever!
если в DOS, то getch() решает проблему, если это windows форма, то где-то в properties должна быть максимальная длина
Ответ отправил: Ilkras (статус: 4-ый класс)
Ответ отправлен: 15.03.2007, 23:09

Отвечает: DragonTusk
Здравствуйте, Griever!
Функция из Си int scanf(const char *format [, argument]... );
format - строка списка аргументов.
В случае ошибки возвращает 0, иначе 1.
Ответ отправил: DragonTusk (статус: 3-ий класс)
Ответ отправлен: 16.03.2007, 00:21


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.46 от 18.03.2007
Яндекс Rambler's Top100

В избранное