Ок, после всей полученной от вас информации я в рамках вашей задачи не вижу причин сохранять данные в строковом виде.
Бинарный архив, как вы верно заметили, позволит сэкономить память.
В чем тогда у вас сейчас вопрос?
Вид для печати
Функция MemMove из библиотеки CAA Memory позволит "перевести" всё что угодно во всё что угодно.
работает! спасибо! в принцепи это и искал!
все отлично работает даже в эмуляции!Цитата:
MEM.MemMove(pSource:=ADR(LW1) , pDestination:= ADR(LWArray[0]), uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LW1)+1 , pDestination:= ADR(LWArray[1]), uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LW1)+2 , pDestination:= ADR(LWArray[2]), uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LW1)+3 , pDestination:= ADR(LWArray[3]), uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LW1)+4 , pDestination:= ADR(LWArray[4]), uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LW1)+5 , pDestination:= ADR(LWArray[5]), uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LW1)+6 , pDestination:= ADR(LWArray[6]), uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LW1)+7 , pDestination:= ADR(LWArray[7]), uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LWArray[0]) , pDestination:=ADR(LW2) , uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LWArray[1]) , pDestination:=ADR(LW2)+1 , uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LWArray[2]) , pDestination:=ADR(LW2)+2 , uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LWArray[3]) , pDestination:=ADR(LW2)+3 , uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LWArray[4]) , pDestination:=ADR(LW2)+4 , uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LWArray[5]) , pDestination:=ADR(LW2)+5 , uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LWArray[6]) , pDestination:=ADR(LW2)+6 , uiNumberOfBytes:= 1);
MEM.MemMove(pSource:=ADR(LWArray[7]) , pDestination:=ADR(LW2)+7 , uiNumberOfBytes:= 1);
Просто изумительно! именно то что я искал! Огромное спасибо! теперь подвежу фор и впуть!
Цитата:
FOR I1:=0 TO 7 BY 1 DO
MEM.MemMove(pSource:=ADR(LW1)+I1 , pDestination:= ADR(LWArray[I1]), uiNumberOfBytes:= 1);
END_FOR
FOR I2:=0 TO 7 BY 1 DO
MEM.MemMove(pSource:=ADR(LWArray[I2]) , pDestination:=ADR(LW2)+I2 , uiNumberOfBytes:= 1);
END_FOR
один вопрос остался, как я пишу массив в фаил
sArchEntry это переменная для записи в буфер, подставляю сюда свой массив и впуть ?Цитата:
sArchEntry := WstWst_TO_VLWst.sVeryLongWStr;
fbFileWrite(xExecute:=TRUE, hFile:=hFile, pBuffer:=ADR(sArchEntry), szSize:=(StrLenW(ADR(sArchEntry)))*2)
Вместо
можно так (и это будет семантически эквивалентно):Цитата:
FOR I1:=0 TO 7 BY 1 DO
MEM.MemMove(pSource:=ADR(LW1)+I1 , pDestination:= ADR(LWArray[I1]), uiNumberOfBytes:= 1);
END_FOR
Цитата:
MEM.MemMove(pSource:=ADR(LW1) , pDestination:= ADR(LWArray[0]), uiNumberOfBytes:= 8);
В pBuffer можно передать адрес чего угодно - в т.ч. и вашего массива.Цитата:
sArchEntry это переменная для записи в буфер, подставляю сюда свой массив и впуть ?