Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хексадецимальное число 00 перевести в ANSI аналог! Неужели невозможно? 
V
    Опции темы
Viroman
Дата 2.9.2008, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Цитата

a код bsa неправильно откладывает ?

Такое ощущение, будто бы вы компьютерный бот smile
Ещё раз, внимание, 00 переводится не в 00, а в E0, в том коде, что дал мне bsa, спасибо ему, он молодец, хоть как то старался помочь..
PM MAIL   Вверх
mes
Дата 2.9.2008, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Viroman @  2.9.2008,  21:08 Найти цитируемый пост)
Такое ощущение, будто бы вы компьютерный бот smile

Как Вы догадались ?

Цитата(Viroman @  2.9.2008,  21:08 Найти цитируемый пост)
Ещё раз, внимание, 00 переводится не в 00, а в E0, 

так объясните, при чем тут ошибка перевода, когда проблема у Вас была с выводом и bsa привел способ как справиться с этим.
подставили бы свой код по преобразованию, а код вывода взали бы от bsa.. 

Вы вот так хотя бы попробовали ?
Код

char  c = '\0';
myfile=fopen("myfile.txt","a+"); 
write(myfile,  &c, 1);
fclose(myfile);




Это сообщение отредактировал(а) mes - 2.9.2008, 22:18


--------------------
PM MAIL WWW   Вверх
Viroman
Дата 3.9.2008, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Я новичок и только как неделю начал разбираться с c++, потому ещё не знаю, какую библиотеку надо включать, чтобы write работал.
А то пишет, что missing prototype for 'writе'
PM MAIL   Вверх
Viroman
Дата 3.9.2008, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



PS: применил fwrite(&c, 1, sizeof(&c), myfile); так работает оутпут, теперь надо поглядеть, что моя прога в самом деле выдаёт..

Добавлено через 6 минут и 57 секунд
PPS: моя программа где то тоже сама портачит, и не хочет 00 писать, то есть как бы она игнорирует его.. Наверное функция concatenate не работает корректно, а именно подфункция либо strcat, либо strcpy..
PM MAIL   Вверх
mes
Дата 3.9.2008, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Viroman @  3.9.2008,  00:20 Найти цитируемый пост)
PPS: моя программа где то тоже сама портачит, и не хочет 00 писать, то есть как бы она игнорирует его.. Наверное функция concatenate не работает корректно, а именно подфункция либо strcat, либо strcpy.


функции с си-строкой воспринимают масив символов до первого нуля, именно поэтому и предложил Вам использовать понятие буффер, вместо понятия си-строки для вашей цели, тогда сразу будет видно какие функции не подходят.

Цитата(Viroman @  3.9.2008,  00:01 Найти цитируемый пост)
начал разбираться с c++

ну если С++, а не С, то лучше использовать std::string , себе же легче..  smile

Это сообщение отредактировал(а) mes - 3.9.2008, 00:38


--------------------
PM MAIL WWW   Вверх
Viroman
Дата 3.9.2008, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Цитата

ну если С++, а не С, то лучше использовать std::string , себе же легче..

Мы идём тернистым путём, си так си smile стд::стринг я уже применял и говорил как раз об этом, что работает, но я не знал, как это дело потом заставить с DeviceIoControl работать, оно ошибку выдавало, что типа несовместимости ввода std::...., требуется char pointer, а как это дело переконвертировать обратно, я не знал..
PM MAIL   Вверх
mes
Дата 3.9.2008, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Viroman @  3.9.2008,  10:22 Найти цитируемый пост)
но я не знал, как это дело потом заставить с DeviceIoControl работать

string.c_str() - возвращает указатель на буффер символов.  



--------------------
PM MAIL WWW   Вверх
Viroman
Дата 3.9.2008, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



В общем, я так и делал string.c_str(), нo толка ещё много не знаю, потому не знал, как сделать, в остальном разобрался уже. Мне код от bsa понравился, только там ошибочка небольшая, после исправления правильно подаёт.
Там где return (dig >= 'A') ? (dig - 'A' + 10) : (dig - '0'); исправить на return (dig >= 'A') ? (dig - 'A' + 10) : (dig - 16); 
На этом эпопея может считаться закрытой до худших времён :=)
PM MAIL   Вверх
mes
Дата 3.9.2008, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Viroman @  3.9.2008,  12:12 Найти цитируемый пост)
о там ошибочка небольшая, после исправления правильно подаёт.
Там где return (dig >= 'A') ? (dig - 'A' + 10) : (dig - '0'); исправить на return (dig >= 'A') ? (dig - 'A' + 10) : (dig - 16); 

В примере bsa использовался хак для приведения символа к верхнему регистру. Дело в том что такой прием можно применять только к буквенным символам английского алфавита, на остальные символы он имет трудно предсказуемое воздействие.
bsa явно указал в примере, что он дает направление , а не готовое решение и приведение кода в нормуперекладывает на Ваши плечи. Вы вместо того, чтоб ограничить воздействаие на нужный диапозон символов, пытаетесь лечить последствия. Такой метод программирования очень опасный, так как очень затрудняет читабельность кода  и дает основание для появления трудно отлавливыемых ошибок.

если уж не хотите добавлять проверок то хотя бы заменить на
Код

 dig &= 0x5F; // приводим к верхнему регистру
 return (dig >= 'A') ? (dig - 'A' + 10) : (dig  - ('0' & 0x5F));

вот другой вариант
Код

    if (dig <= '9') return dig  - '0';
    return (dig & 0x5F) - 'A' + 10;

и наконец полный вариант
Код

char aciiDigToInt(char dig)
{
    if ('0' <= dig && dig <= '9') return dig  - '0';
    dig &= 0x5F; // приводим к верхнему регистру
    if ('A' <= dig && dig <= 'F') return dig -'A'+10;
    return 0; // все несушествуюшие варианты приравниваем к нулю
   // хотя в реале надо либо возврашать флаг либо порождать исключение
  // также если учесть, что возвращаемое значение лежит в диапозоне от 0 то 15 включительно,
  //то можно возвражать любое число не из вышеуказанного диапазона, как ошибку, например
  //  return 0xFF;
  //  но это тоже хак, о котором как минимум надо указать в комментарии
}


Цитата(Viroman @  3.9.2008,  12:12 Найти цитируемый пост)
На этом эпопея может считаться закрытой до худших времён :=) 

не забудь тогда  пометить тему как решенную
  smile 

Это сообщение отредактировал(а) mes - 3.9.2008, 13:50


--------------------
PM MAIL WWW   Вверх
Viroman
Дата 3.9.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Цитата

Такой метод программирования очень опасный, так как очень затрудняет читабельность кода  и дает основание для появления трудно отлавливыемых ошибок.

Не вижу особой надобности вставлять защиты от дурака и гонять лишние процциклы. Если бы для коммерческого пользования, то да, а для себя я и так знаю, какие символы входят в разрешённые smile
PM MAIL   Вверх
bsa
Дата 3.9.2008, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Эх... знал, что меня этот & 0x5F когда-нибудь погубит... дождался  smile 
Надо заменить
Код
dig &= 0x5F; //приведение к верхнему регистру

на
Код
dig = (dig >= 'a') ? (dig & 0x5F) : dig; //приведение к верхнему регистру

PM   Вверх
mes
Дата 3.9.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Viroman @  3.9.2008,  15:23 Найти цитируемый пост)
Не вижу особой надобности вставлять защиты от дурака и гонять лишние процциклы. 

ну если Вам охота выполнять работу за компилятор и постояно при любых изменениях самостоятельно контроллировать правильность всех условий, то конечно продолжайте так писать.
Однако мне кажется , что у программиста, и без того полно проблем, чтоб еще держать в голове каждую строчку кода.



--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1066 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.