| 
			| 
					
						| yanart 
								Гость
 | 
								|  | « Ответ #30 : 28-08-2009 09:53 »  |  | 
 
 yanart, зачем такой опасный способ, в посте sss #2 всё гораздо лучше сделано )
 Алексей1153++, если вы считате что код опасный, разверните свой ответ. Я в этом коде не вижу никакой опасности, даже если unsigned long будет 10 байт. Ведь сначало идут младшие байты числа, а нам надо поменять старший байт младщего слова. Зачем громоздить лишнего (пример исходник sss). Считаю, если делать сдвигами - влияет на быстродействие, если асмом, то конечно вариант, но  не все знают ассемблер, мой вариант простой. Уж, извините, если что не так. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    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'; |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    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 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #35 : 28-08-2009 10:23 »  |  | 
 
 Алексей1153++, не, а кто мешает написать функции побайтовой работы с long? Не вижу ничего плохого в массиве. Можно ещё: union{
 long value;
 struct
 {
 char first;
 char second;
 char third;
 char fourth;
 } bytes;
 }
 
И следить за выравниванием. |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #36 : 28-08-2009 10:32 »  |  | 
 
 Ну вот скажи мне, какой идиот напишет в своей программеu.b[111]=0xCC;
 когда объявил массив из 4-ех элементов?
 
 да любой, и не обязательно идиот. Раз класс это позволяет напрямую сделать - ошибка может случиться. А вот если бы ты сделал этот массив private , ябы ни слова не сказал   Ладно, согласен, для работы со строками есть классы, только не всегда ими хочется пользоваться.А если не со строками
 int A[10];
 A[101]=666;
 
 Какой класс посоветуете? Конечно можно написать свой, а то вдруг за пределы массива выскочу;) ведь так?
 
 да любой из названных + самописныйDimka , дык, что угодно можно написать, лишь бы не делать явных грубых ошибок )yanart , а насчёт агрессии - так это я с недосыпу. Ну и вообще, я очень агрессивный   |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Вад | 
								|  | « Ответ #37 : 28-08-2009 12:10 »  |  | 
 
 Алексей1153++, работа с двойным словом побайтово с целью именно доступа к байтам - это, имхо, в любом случае низкоуровневая работа, требующая внимательности и прямых рук. Поэтому можно делать как угодно, лишь бы метод был переносимым и надёжным с точки зрения компиляции правильного кода.  Кстати, у sss в примере был  char  arry[sizeof(DWORD)];в структуре    (и это, к слову, лучше, чем arry[4]) |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    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"; ... |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #41 :  28-08-2009 16:44 »   |  | 
 
 фигня задача ) yanartchar s[]="Hello word";
 int len=::strlen(s);
 if(len)
 {
 char c=s[0];
 s[0]=s[len-1];
 s[len-1]=c;
 }
 
, я ж к чему прицепился то ? Не из удовольствия, а справедливости ради: ты советуешь человеку public массив , вместо private массива+public методов. Только к этому, а так не на что обижаться |  
						| 
								|  |  
								| « Последнее редактирование: 28-08-2009 16:46 от Алексей1153++ » |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #42 : 28-08-2009 16:47 »  |  | 
 
 а про "со своей МЕГАбезопасностью? " зря язвишь - вот программы таких как ты хакеры и используют для распространения вирусов. Лучше я поманьячу с надёжностью, чем потом изза меня ограбят банк а типом char[] я не пользуюсь, только const char* или CString. Последнее часто экономит время и силы   |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| yanart 
								Гость
 | 
								|  | « Ответ #43 : 28-08-2009 16:49 »  |  | 
 
 Задача то простая, не ну согласись, код опасный, за пределы можно вылезти   Ладно, предлагаю дружбу    |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #44 : 28-08-2009 16:51 »  |  | 
 
 да никто и не ссорился, заметь )
 Насчёт опасного кода - так это же не член класса, поэтому и опасно ))
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	|  |