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

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


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

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

Выпуск № 688
от 22.03.2007, 04:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 462, Экспертов: 53
В номере:Вопросов: 3, Ответов: 6


Вопрос № 78561: Подскажите,пожалуйста,каким образом данные типа ANSI string (например "FF") преобразовать в тип integer в шестнадцатиричном виде,а далее привести к обычному числовому виду.Проще говоря, в текстовом файле записано шестнадцатиричное число,над...
Вопрос № 78594: Весна за окном! А я хочу кое-что у Вас расспросить. C++ Builder 6.0. Что за текстовый тип данных AnsiString? Как с переменной этого типа производить операции конкатенации, обращения к символам, вырезать из нее группы символов? <...
Вопрос № 78658: Люди добрые, помогите с таким вопросом. Как можно на с++ прочитать содержимое директории, получить типа список файлов и папок, изменить директорию, создать директорию. Еще есть вопрос, как написать резидентную программу, т.е. ту, которая будет запуск...

Вопрос № 78.561
Подскажите,пожалуйста,каким образом данные типа ANSI string (например "FF") преобразовать в тип integer в шестнадцатиричном виде,а далее привести к обычному числовому виду.Проще говоря, в текстовом файле записано шестнадцатиричное число,надо получить его в десятичном виде.И вообще возможно ли ето. Заранее благодарен.
Отправлен: 16.03.2007, 11:46
Вопрос задал: Козлов Николай Валерьевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Ilkras
Здравствуйте, Козлов Николай Валерьевич!
Можно воспользоваться функцией sscanf() или atoi(), но они возьмут только последние 8 байтов исходной строчки, остальное потеряется или случится переполнение(и програма вылетит). Если вы хотите выполнить данную операцию для каждого символа произвольной последовательности шестнадцатеричных цифр в формате ASCII, то проще всего это сделать вручную:
char * st = "8899AABBCCDDEEFF";
int i;
for(i=0; i<strlen(st);i++)
{
switch(st[i])
{
case '0': printf("0"); break;
case '1': printf("1"); break;
...
case 'E':
case 'e': printf("15"); break;
case 'F':
case 'f': printf("16"); break;
}
}

В случае, если ваша строчка содержит числа разделеные пробелом или вы каким-либо образом знаете (в задании вы не указали этого) как строка делится на числа, то можете копировать каждое число в отделную строчку и воспользоваться atoi.
Ответ отправил: Ilkras (статус: 4-ый класс)
Ответ отправлен: 16.03.2007, 12:20
Оценка за ответ: 3

Отвечает: ramok
Здравствуйте, Козлов Николай Валерьевич!

не совсем понятно. нужно получить это же чисто в текстовом виде но в десятичной формы? тогда вам будет необходимо преобразовывать в два этапа:
1) преобразование из текстового вида в бинарный
2) из бинарного в нужный текстовый вид

1) рекомендую функцию strtol с третьим параметром равным 16
(то есть преобразовать из текстового вида в 16-чной системы исчисления в бинарный)
2) преобразование из бинарного в текстовый обычно производится функцией sprintf(). аналогично printf(), только первым параметром можно указать стоку куда преобразовывать.

пример в приложении

если нужно просто преобразовать в бинарный вид то тогда вам нужен только пункт 1) Ж:-)

Приложение:

Ответ отправил: ramok (статус: Практикант)
Ответ отправлен: 16.03.2007, 12:22

Отвечает: kool
Здравствуйте, Козлов Николай Валерьевич!
Так примерно -
int c=0;
fscanf(fin,"%02X",&c);
Удачи!
---------
I am.
Ответ отправил: kool (статус: Студент)
Ответ отправлен: 16.03.2007, 19:46


Вопрос № 78.594
Весна за окном!

А я хочу кое-что у Вас расспросить.
C++ Builder 6.0. Что за текстовый тип данных AnsiString?
Как с переменной этого типа производить операции конкатенации,
обращения к символам, вырезать из нее группы символов?
Чем этот тип отличается от Char? Как производить преобразования
Char - AnsiString, AnsiString - Char?
Отправлен: 16.03.2007, 17:30
Вопрос задал: Ferruccio Bonipiero (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: ramok
Здравствуйте, Ferruccio Bonipiero!

http://www.codenet.ru/progr/bcb/ansistring.php
Ответ отправил: ramok (статус: Практикант)
Ответ отправлен: 16.03.2007, 18:18


Вопрос № 78.658
Люди добрые, помогите с таким вопросом. Как можно на с++ прочитать содержимое директории, получить типа список файлов и папок, изменить директорию, создать директорию. Еще есть вопрос, как написать резидентную программу, т.е. ту, которая будет запускаться и висеть в памяти, пока я не убью ее в процессах. Буду благодарен за любую информацию, нигде не могу найти ответы на эти вопросы =(
Отправлен: 17.03.2007, 02:24
Вопрос задал: Igor_sv (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: V1s0r
Здравствуйте, Igor_sv!
Могу определённо ответить насчёт файловой системы:

boost::filesystem
Лучший источник информации - оф. сайт (boost.org)
"The Boost Filesystem Library provides portable facilities to query and manipulate paths, files, and directories."

Можно также истользовать Qt (http://www.trolltech.com/qt/), в этой библиотеке неплохая поддержка файловой системы (к тому же многоплатформенная).
Ответ отправил: V1s0r (статус: 2-ой класс)
Ответ отправлен: 17.03.2007, 09:23
Оценка за ответ: 4
Комментарий оценки:
Спасибо за информацию! Буду разбираться с библиотеками.

Отвечает: kool
Здравствуйте, Igor_sv!
Чтобы получить список содержимого каталога можно использовать
ф-ции FindFirsFile FindNextFile.
Чтобы создать каталог можно использовать ф-цию
BOOL CreateDirectory(
LPCTSTR lpPathName, // directory name
LPSECURITY_ATTRIBUTES lpSecurityAttributes // SD
);
Чтобы изменить каталог можно использовать ф-цию
BOOL MoveFile(
LPCTSTR lpExistingFileName, // file name
LPCTSTR lpNewFileName // new file name
);
Пока процесс не выполнит свой код он будет находится в памяти.
Например, если поместить необходимый код в бесконечный цикл вида
while(1){
//Необходимый код.
}
процесс будет оставаться в памяти пока его не завершат принудительно
или не произойдет выход из цикла.
Удачи!

---------
I am.
Ответ отправил: kool (статус: Студент)
Ответ отправлен: 17.03.2007, 09:46
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ! Единственное, что не совсем устроило - это while - цикл для выполненения бесконечного кода. Дело в том, что если будет такой цикл, то программа будет в памяти, но и окно будет также видно. А резидентная программа, это которая выполняет часть кода, потом завершается, но на самом деле, она висит в памяти, и посмотреть ее можно только по запущенным процессам, а иногда даже и в процессах умудряются спрятать, все больше ее никак не видно, вот собственно интересовало, как сделать такою программу. Ну ничего, все равно большое спасибо, ваши ответы по поводу файловой системы очень пригодились.


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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

В избранное