Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Изменение байтов в dword'е.  (Прочитано 17652 раз)
0 Пользователей и 1 Гость смотрят эту тему.
yanart
Гость
« Ответ #30 : 28-08-2009 09:53 » 

yanart, зачем такой опасный способ, в посте sss #2 всё гораздо лучше сделано )

Алексей1153++, если вы считате что код опасный, разверните свой ответ. Я в этом коде не вижу никакой опасности, даже если unsigned long будет 10 байт. Ведь сначало идут младшие байты числа, а нам надо поменять старший байт младщего слова. Зачем громоздить лишнего (пример исходник sss).

Считаю, если делать сдвигами - влияет на быстродействие, если асмом, то конечно вариант, но
не все знают ассемблер, мой вариант простой.

Уж, извините, если что не так.
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #31 : 28-08-2009 10:00 » 

yanart,

1) развёртываю:

void main()
{
   u.dw = 0x77778899;
   u.b[111]=0xCC;    // вылет или попорченные данные программы
}

2)
Цитата
Считаю, если делать сдвигами - влияет на быстродействие
компилятор всё это превратит в прямые подстановки адресов байтов, и не будет рантайм сдвигов Улыбаюсь Работать будет мновенно

громоздкости у sss не вижу , вижу только правильное обращение с памятью

3)
Цитата
если асмом, то конечно вариант

абсолютно не вариант


« Последнее редактирование: 28-08-2009 10:02 от Алексей1153++ » Записан

yanart
Гость
« Ответ #32 : 28-08-2009 10:04 » 

yanart,

1) развёртываю:

void main()
{
   u.dw = 0x77778899;
   u.b[111]=0xCC;    // вылет или попорченные данные программы
}

2)
Цитата
Считаю, если делать сдвигами - влияет на быстродействие
компилятор всё это превратит в прямые подстановки адресов байтов, и не будет рантайм сдвигов Улыбаюсь Работать будет мновенно

громоздкости у sss не вижу , вижу только правильное обращение с памятью

3)
Цитата
если асмом, то конечно вариант

абсолютно не вариант


Извините, так тогда по вашему и со строками работать "опасный код"

char s[10];
s[111]='a';
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #33 : 28-08-2009 10:06 » 

yanart, для строк существуют:
1) спецклассы (std::string , CString)
2)
const char* s;
s="a";
+ функции работы со строками

3) ну и почитать книжки по с++ Ага

yanart, ты попробуй код sss, потом поделай действий  и посмотри в дизассемблере Улыбаюсь

Давай, если ты убираешь рекламу , мы просто будем считать тебя новичком, а не спамером ?
Записан

yanart
Гость
« Ответ #34 : 28-08-2009 10:22 » 

yanart, для строк существуют:
1) спецклассы (std::string , CString)
2)
const char* s;
s="a";
+ функции работы со строками

3) ну и почитать книжки по с++ Ага

yanart, ты попробуй код sss, потом поделай действий  и посмотри в дизассемблере Улыбаюсь

Давай, если ты убираешь рекламу , мы просто будем считать тебя новичком, а не спамером ?

Я её уже давно убрал! Я единственное не понимаю, почему такая агрессия на форуме, ну да была реклама, так как я не увидел, что нельзя рекламу в подписи делать, можно было в личку написать, я бы её убрал. Я ведь не ради наживы! Просто я сейчас создаю бесплатные видеоуроки по С++, ну и народу может было бы интересно, я со своего сайта ведь с этой рекламмы ни копейки не получу.

Написал код, сразу его обхаяли!

Ну вот скажи мне, какой идиот напишет в своей программе
u.b[111]=0xCC;
когда объявил массив из 4-ех элементов?

Ладно, согласен, для работы со строками есть классы, только не всегда ими хочется пользоваться.
А если не со строками
int A[10];
A[101]=666;

Какой класс посоветуете? Конечно можно написать свой, а то вдруг за пределы массива выскочу;) ведь так?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #35 : 28-08-2009 10:23 » 

Алексей1153++, не, а кто мешает написать функции побайтовой работы с long?

Не вижу ничего плохого в массиве. Можно ещё:
Код:
union
{
   long value;
   struct
   {
      char first;
      char second;
      char third;
      char fourth;
   } bytes;
}
И следить за выравниванием.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #36 : 28-08-2009 10:32 » 

Ну вот скажи мне, какой идиот напишет в своей программе
u.b[111]=0xCC;
когда объявил массив из 4-ех элементов?
да любой, и не обязательно идиот. Раз класс это позволяет напрямую сделать - ошибка может случиться. А вот если бы ты сделал этот массив private , ябы ни слова не сказал Ага

Ладно, согласен, для работы со строками есть классы, только не всегда ими хочется пользоваться.
А если не со строками
int A[10];
A[101]=666;

Какой класс посоветуете? Конечно можно написать свой, а то вдруг за пределы массива выскочу;) ведь так?
да любой из названных + самописный

Dimka, дык, что угодно можно написать, лишь бы не делать явных грубых ошибок )

yanart, а насчёт агрессии - так это я с недосыпу. Ну и вообще, я очень агрессивный Отлично
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #37 : 28-08-2009 12:10 » 

Алексей1153++, работа с двойным словом побайтово с целью именно доступа к байтам - это, имхо, в любом случае низкоуровневая работа, требующая внимательности и прямых рук. Поэтому можно делать как угодно, лишь бы метод был переносимым и надёжным с точки зрения компиляции правильного кода.

Кстати, у sss в примере был
Код:
char  arry[sizeof(DWORD)];
в структуре Ага (и это, к слову, лучше, чем arry[4])
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #38 : 28-08-2009 14:46 » 

ну это я не заметил -
char  arry[sizeof(DWORD)];


) Но поля всё таки безопаснее
Записан

yanart
Гость
« Ответ #39 : 28-08-2009 16:36 » 

Алексей1153++, работа с двойным словом побайтово с целью именно доступа к байтам - это, имхо, в любом случае низкоуровневая работа, требующая внимательности и прямых рук. Поэтому можно делать как угодно, лишь бы метод был переносимым и надёжным с точки зрения компиляции правильного кода.

Кстати, у sss в примере был
Код:
char  arry[sizeof(DWORD)];
в структуре Ага (и это, к слову, лучше, чем arry[4])

Согласен, но так как мы обращаемся к старшему байту младшего слова, это не существенно.
Записан
yanart
Гость
« Ответ #40 : 28-08-2009 16:40 » 

Алексей1153++, а как бы ты решил следующую задачу со своей МЕГАбезопасностью?

Переставить местами в строке первый и последний элементы. Интересно посмотреть Улыбаюсь

char s[]="Hello word";
...

Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #41 : 28-08-2009 16:44 » 

фигня задача )
Код:
char s[]="Hello word";

int len=::strlen(s);
if(len)
{
   char c=s[0];
   s[0]=s[len-1];
   s[len-1]=c;
}

yanart, я ж к чему прицепился то ? Не из удовольствия, а справедливости ради: ты советуешь человеку public массив , вместо private массива+public методов. Только к этому, а так не на что обижаться
« Последнее редактирование: 28-08-2009 16:46 от Алексей1153++ » Записан

Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #42 : 28-08-2009 16:47 » 

а про "со своей МЕГАбезопасностью? " зря язвишь - вот программы таких как ты хакеры и используют для распространения вирусов. Лучше я поманьячу с надёжностью, чем потом изза меня ограбят банк

а типом char[] я не пользуюсь, только const char* или CString. Последнее часто экономит время и силы Улыбаюсь
Записан

yanart
Гость
« Ответ #43 : 28-08-2009 16:49 » 

Задача то простая, не ну согласись, код опасный, за пределы можно вылезти Улыбаюсь

Ладно, предлагаю дружбу  Ага
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #44 : 28-08-2009 16:51 » 

да никто и не ссорился, заметь )

Насчёт опасного кода - так это же не член класса, поэтому и опасно ))
Записан

Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines