** Artur |
Отправлено: 08.09.2005, 15:15 |
|
Не зарегистрирован
|
unsigned char ch[10];
*(unsigned long*) (&ch[1]) = 0xAD;
что это может значить??? и почему написали так???
Идеи и предложения есть??? |
|
Guest |
Отправлено: 08.09.2005, 15:50 |
|
Не зарегистрирован
|
Запись 8-ми байтов по адресу ch+1
Навороты служат для правильного преобразования типов. |
|
Guest |
Отправлено: 08.09.2005, 15:53 |
|
Не зарегистрирован
|
Более того 0D 0A (так будет в памяти) возможно означает конец строки. |
|
vvoid |
Отправлено: 08.09.2005, 18:16 |
|
Машинист паровоза
Группа: Участник
Сообщений: 171
|
QUOTE | Более того 0D 0A (так будет в памяти) возможно означает конец строки. |
Какое 0D0A? Нифига подобного 0D0A — это два байта, а 0xAD — один.
Если предположить, что сначала
ch = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
то после выполнения этой операции будет так:
ch = {0x00,0xAD,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
PS* Не проверял, но 99% даю.
Отредактировано vvoid — 08/09/2005, 18:16
|
|
AVC |
Отправлено: 09.09.2005, 08:47 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE | Какое 0D0A? Нифига подобного 0D0A — это два байта, а 0xAD — один.
|
Ага. Я стормозил. (Крутит пальцем в ладошке)
Отредактировано AVC — 09/09/2005, 07:48 |
|
** Admin |
Отправлено: 09.09.2005, 20:45 |
|
Не зарегистрирован
|
Подобным образом приходилось работать с приборами.
У них в памяти помещались и программа и данные,
все это дело читалось/писалось/обрабатывалось.
Поэтому часто приходилось прибегать или к конструкциям типа
CODE |
const unsigned int NameZoneRazm = 65536;
union NameZone{ // Зона имен (каталог) 1024 * 64
byte bf[NameZoneRazm];
struct{
int isRec; // признак наличия
char Name[32]; // имя
char WDate[10]; // дата
short firstRec; // номер первой дочерней записи
short countRec; // кол-во дочерних записей
short tipRec; // тип записи (fffe — дата, fff8 — dir)
short NumNextRec; // номер след.объекта (ffff — послед.объект в группе)
short ParentNum; // номер родителя (ffff — Root)
byte Pusto[8]; // -- запас пока пусто ---
}ud[1024];
}nz;
|
и работать с этой памятью то как с массивом байт ,
то как с конкретными данными типа nz.ud[25].Name
и приводить типы как в указанной вами конструкции -
работать с байтами
CODE |
unsigned int CountByte = endFat — bf + 1; // определяем кол-во байт
if(CountByte%16) CountByte = (CountByte/16)*16 + 16; // выравниваем по 16 байтам в плюс
|
или
CODE |
buf++;
buf = (char*)((((int)buf) + 1)& 0xFFFFFFFE); // реальная конструкция из программы
//или
buf++; buf = (char*)((((int)buf) + 3)& 0xFFFFFFFC);
|
|
|
|