/** * разбираем группу для подбора арматуры * Документ 28 // 2 int кол-во байт в названии группы // x string название группы // 80 string C255, остальные нулевые // 8 double сопротивление стали // 8 - нулевые байты // 8 double gamma_C // 8 double FC // 1 - 1-группа, 0-конструктивный элемент // 2 - нулевые байты // 8 double коэффициент расчетной длины XoZ // 8 double коэффициент расчетной длины XoY // 64 - нулевые байты // 4 int кол-во элементов // x int номера элементов друг за другом по 4 байта * * @param String $s * @return Array */ function get_from_spr($s) { $pos = 0; //кол-во байт в названии группы $group_name_byte_count = unpackInt_2(substr($s, $pos, 2)); $pos += 2; //название группы $this->name = (string) substr($s, $pos, $group_name_byte_count); $pos += $group_name_byte_count; //класс стали, используем только 10 символов из 80 $this->steel = (string) substr($s, $pos, 10); $pos += 80; //сопротивление стали $this->Ry = unpackDouble(substr($s, $pos, 8)); $pos += 8; //пропускаем пустые 8 байт $pos += 8; //gamma_C $this->gamma_c = unpackDouble(substr($s, $pos, 8)); $pos += 8; //гибкость $this->FC = unpackDouble(substr($s, $pos, 8)); $pos += 8; //тип группы, пропуск 2-х пустых $this->group_type = unpackInt_1(substr($s, $pos, 1)); $pos += 3; //коэффициенты расчетной длины $this->mu_XZ = unpackDouble(substr($s, $pos, 8)); $pos += 8; $this->mu_XY = unpackDouble(substr($s, $pos, 8)); $pos += 8; //пропускаем пустые 64 байта $pos += 64; //кол-во элементов $member_count = unpackInt_4(substr($s, $pos, 4)); $pos += 4; //номера элементов $this->list = array(); for ($i = 1; $i <= $member_count; $i++) { $this->list[] = unpackInt_4(substr($s, $pos, 4)); $pos += 4; } }
function get_from_spr($data) { $pos = 0; //кол-во байт в типе стали (ищем первое вхождение нулевого байта) $steelTypeByteCount = strpos($data, ""); // класс стали $this->steel_type = substr($data, 0, $steelTypeByteCount); $pos += 80; // Тип группы $this->group_type = unpackInt_1(substr($data, $pos, 1)); $pos += 1; // Тип элемента $this->member_type = unpackInt_1(substr($data, $pos, 1)); $pos += 1; // Нулевые байты $pos += 3; // Коэффициент расчетной длины отличается от нормативных $this->isMuSameWithRegulation = unpackInt_1(substr($data, $pos, 1)); $pos += 1; // 00 - расчетные длины, 01 - коэффициенты расчетной длины $this->isMuUsed = unpackInt_1(substr($data, $pos, 1)); $pos += 1; // Неупругая работа (0 - нет, 1 - да) $this->isOnlyElastic = unpackInt_1(substr($data, $pos, 1)); $pos += 1; // сопротивление стали $this->steel_Ry = unpackDouble(substr($data, $pos, 8)); $pos += 8; //gamma_N $this->gamma_n = unpackDouble(substr($data, $pos, 8)); $pos += 8; //gamma_C $this->gamma_c = unpackDouble(substr($data, $pos, 8)); $pos += 8; // Нулевые байты $pos += 8; // Коэффициенты расчетной длины $this->mu_XZ = unpackDouble(substr($data, $pos, 8)); $pos += 8; $this->mu_XY = unpackDouble(substr($data, $pos, 8)); $pos += 8; // Гибкости $this->flexCompressed = unpackDouble(substr($data, $pos, 8)); $pos += 8; $this->flexTensed = unpackDouble(substr($data, $pos, 8)); $pos += 8; // Расстояние между точками раскрепления $this->bucklingDistance = unpackDouble(substr($data, $pos, 8)); $pos += 8; // Нулевые байты $pos += 16; // Расчетные длины $this->length_XZ = unpackDouble(substr($data, $pos, 8)); $pos += 8; $this->length_XY = unpackDouble(substr($data, $pos, 8)); $pos += 8; // Неизвестные значения $this->noname1 = unpackDouble(substr($data, $pos, 8)); $pos += 8; $this->noname2 = unpackDouble(substr($data, $pos, 8)); $pos += 8; // Нулевые байты $pos += 8; // Проверка перемещений от всех нагрузок (0 - да, 1 - нет) $this->deflectionFromAllLoadsToBeChecked = unpackInt_1(substr($data, $pos, 1)); $pos += 1; // Проверка перемещений от временных нагрузок (0 - да, 1 - нет) $this->deflectionFromTemporaryLoadsToBeChecked = unpackInt_1(substr($data, $pos, 1)); $pos += 1; // Нулевые байты $pos += 32; // Предельные относительные перемещения $this->limitRelativeDisplacementFromAllLoads = unpackFloat(substr($data, $pos, 4)); $pos += 4; $this->limitRelativeDisplacementFromTemporaryLoads = unpackFloat(substr($data, $pos, 4)); $pos += 4; // Нулевые байты $pos += 22; // Дополнительная группа (0 - нет, 1 - да) $this->isGroupAdditional = unpackInt_1(substr($data, $pos, 1)); $pos += 1; // Нулевые байты $pos += 40; // Предельные абсолютные перемещения $this->limitAbsoluteDisplacementFromAllLoads = unpackFloat(substr($data, $pos, 4)); $pos += 4; $this->limitAbsoluteDisplacementFromTemporaryLoads = unpackFloat(substr($data, $pos, 4)); $pos += 4; }