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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос Visual studio 
V
    Опции темы
Alexey68
Дата 9.2.2014, 04:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


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

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



Здравствуйте All.
Прошу помощи в решении вопроса.
код:
Код

BYTE buffer2[] = {0x12, 'Z', 5, 7};
int count = 26534212349;
sscanf(buffer2, "%d", count);

если компилирую в Borland C++ 2007 всё нормально, если в Visual studio 2008, то пишет:
"sscanf: невозможно преобразовать параметр 1 из 'BYTE [3]' в 'const char *'"
какие варианты преобразования?
И главный вопрос:
При запуске одной и той же программы на XP результат вывода симоволов один, а на Win 7 отличается (на EN и на RU версии одинаково), код:
unsigned const char* my_key[] = {"1","A","Z","S","3"};
printf("My_key = %s\n", my_key);
в чём причина?
вот отличия:
http://rghost.ru/52300212

Это сообщение отредактировал(а) Alexey68 - 9.2.2014, 07:36
PM MAIL   Вверх
feodorv
Дата 9.2.2014, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(Alexey68 @  9.2.2014,  05:13 Найти цитируемый пост)
если в Visual studio 2008, то пишет:
"sscanf: невозможно преобразовать параметр 1 из 'BYTE [3]' в 'const char *'"

Правильно пишет))) Потому что sscanf ожидает в первом параметре строку (заканчивающуюся терминирующим символом '\0', чего у Вас нет и в помине) из знаковых символов (char), Вы же отправляете туда массив из беззнаковых символов (BYTE - это unsigned char). Кроме того, в отличии от printf scanf требует адрес на целочисленную переменную:
Цитата(Alexey68 @  9.2.2014,  05:13 Найти цитируемый пост)
sscanf(buffer2, "%d", &count);


Цитата(Alexey68 @  9.2.2014,  05:13 Найти цитируемый пост)
в чём причина?

Вы передаёте в функцию printf в качестве параметра для формата %s не строку, а указатель на массив строк, в результате у Вас происходит печать массива указателей (то есть массива целочисленных значений) как массива символов. В XP и в Win 7 просто значения указателей разные, соответственно и вывод разный.

Предлагаю варианты:
Код
printf("My_key = %p\n", my_key);
печать значения указателя my_key
Код
printf("My_key = %s\n", my_key[0]);
печать самой первой строки из массива строк my_key.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Alexey68
Дата 10.2.2014, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


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

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



Спасибо feodorv.
но в данном случае у меня проблема не с выводом (его использовал чтобы увидеть значения),
а с тем чтобы преобразовать число: int count = 26534212349; в массив символов (BYTE buffer2[] = {0x12, 'Z', 5, 7};) 

PM MAIL   Вверх
feodorv
Дата 10.2.2014, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(Alexey68 @  10.2.2014,  02:30 Найти цитируемый пост)
но в данном случае у меня проблема не с выводом (его использовал чтобы увидеть значения)

Какой вопрос, такой и ответ)))

Цитата(Alexey68 @  10.2.2014,  02:30 Найти цитируемый пост)
а с тем чтобы преобразовать число: int count = 26534212349; в массив символов (BYTE buffer2[] = {0x12, 'Z', 5, 7};) 

Про это в первом сообщении ни слова. Всё равно не ясно толком, что нужно сделать. Даже число задано с переполнением. Сделайте:
Код

  int count = 26534212349;
  printf( "count = %d\n", count);



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Alexey68
Дата 10.2.2014, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


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

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



из числа  int count = 26534212; мне необходимо получить аргумент для функции:
void rc4_init( unsigned const char* key, unsigned int key_length )
и ещё вопрос, каким образом использовать TCHAR в качестве пути и имени файла после получения из
функции:
TCHAR path[MAX_PATH];
(GetModuleFileName(NULL, path, MAX_PATH) == 0)
далее:
fFile = fopen(path, "rb");
и к:
if(CreateProcess(NULL, path,NULL,NULL,false,NULL,NULL,NULL,&suStartUpInformation,&piProcessInformation))
как это реализовать?

Это сообщение отредактировал(а) Alexey68 - 10.2.2014, 08:55
PM MAIL   Вверх
feodorv
Дата 10.2.2014, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(Alexey68 @  10.2.2014,  09:48 Найти цитируемый пост)
мне необходимо получить аргумент для функции

Код

unsigned int count = 2653421234u;
rc4_init( (unsigned const char*) &count, sizeof(unsigned int));



Цитата(Alexey68 @  10.2.2014,  09:48 Найти цитируемый пост)
как это реализовать?

Вам что точно нужно? Открыть файл или запустить процесс? Если второе, то причём тут первое?

Добавлено через 6 минут и 18 секунд
Цитата(feodorv @  10.2.2014,  10:59 Найти цитируемый пост)
rc4_init( (unsigned const char*) &count, sizeof(unsigned int));

Если будете использовать этот код только на одной платформе, то сойдёт. Если предполагаете переносить на другую, то лучше, всё-таки, так:
Код

unsigned char key[4];
key[0] = (unsigned char) (count >> 24);
key[1] = (unsigned char) (count >> 16);
key[2] = (unsigned char) (count >> 8);
key[3] = (unsigned char) (count);
rc4_init( key, 4);

 smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Alexey68
Дата 10.2.2014, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


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

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



>>Вам что точно нужно? Открыть файл или запустить процесс? Если второе, то причём тут первое?
и первое и второе
PM MAIL   Вверх
xvr
Дата 10.2.2014, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Alexey68 @  10.2.2014,  08:48 Найти цитируемый пост)
и ещё вопрос, каким образом использовать TCHAR в качестве пути и имени файла после получения из

Так и использовать. Только вместо fopen возьмите tfopen (а еще лучше _tfopen_s)

PM MAIL   Вверх
Alexey68
Дата 11.2.2014, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Alexey
*


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

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



Большое спасибо feodorv и xvr за помощь в решении моих вопросов, штудирую типы данных.)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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