Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2013, 22:38   #1
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию Приведение типов

В мире c++ есть функция sprintf, которая сохраняет отформатированную строку в памяти, а не подает на устройство вывода. В ходе работы этой функции мы получаем в массив signed char[n] нужную нам информацию. С меня же некоторая функция требует исключительно unsigned char. Конечно, можно копировать массив signed char в unsigned char с помощью цикла.
Код:
  unsigned char text[64] ={0};
  char text1[64] ={0};
  sprintf(text1,"Hello");
  for(int i=0; i<64;i++)
  {
     text[i] = (unsigned char) text1[i];
  }
Но может это возможно сделать изящнее? Например:
Код:
 text=reinterpret_cast<unsigned char *>(text1);
В моем понимании, перекочевавшим от NASM, text - указатель на первый элемент массива, и его тип должен быть char *. text1 - unsigned char *. Но преобразование вверху не прокатывает, следовательно, что-то не так понимаю. В моем случае от насильного приведения ничего не поменяется, так как работа осуществляется с ASCII символами, а им до лампочки unsigned это или signed.

Заранее благодарю.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 09.10.2013 в 22:48.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 10.10.2013, 03:52   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

У меня работает:
Код:
#include <cstdio>

int main()
{
  char char_text[64] = { 0 };

  sprintf(char_text, "Hello, world!");

  unsigned char *text = reinterpret_cast<unsigned char *>(char_text);

  printf("%s\n", text);
}
Код:
$ ./prog
Hello, world!
$
netrino вне форума Ответить с цитированием
Старый 10.10.2013, 19:15   #3
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Спасибо. Я думаю понятно, где ошибка.
text1 должен быть указателем, а не массивом

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приведение типов данных с# Sergey_gorobets Помощь студентам 1 28.03.2013 17:27
приведение типов??? nikozavr C# (си шарп) 1 14.05.2011 22:29
NetUserAdd() приведение типов disaer Общие вопросы C/C++ 2 12.05.2011 08:09
С - приведение типов onewho Общие вопросы C/C++ 3 21.11.2010 00:12
Приведение типов в Qt mike_tihomirov Qt и кроссплатформенное программирование С/С++ 1 19.06.2010 13:14