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