Kezdőoldal » Számítástechnika » Programozás » Pascalban hogy lehet előszedni...

Pascalban hogy lehet előszedni az adatokat amik az adott pointer-re mutatnak?

Figyelt kérdés

Aszongya, hogy adott egy Pointer típusú Pointer, és megvan az is, hogy mennyi adat van ott (byte-ban), és ezt az adotot kéne egy akármilyen formátumban kibányászni, hogy ideiglenesen tároljam, amíg el nem küldöm Socket-en


szóval valami ilyesmi kéne:


var x:Tvalami;

y:Takármi // ez bármilyen típus lehet, az adat kezelése a továbbiakban nem fontos


procedure varazslas(adat:pointer; adatmeret:word; var cel:Takarmi);

Begin

(*

itt egy kis varázslás, hogy az adat címen lévő adatmeret hosszuságú

cucc bekerüljön a cel-ba

*)

end;


és meghívni:


varazslas(@x,sizeof(x),y);



2014. jan. 1. 23:31
1 2
 1/13 anonim ***** válasza:

Ugyan nem vágom a pacalt, de ebből a bonyolult megfogalmazásból úgy veszem ki, hogy te simán át szeretnél másolni X bájtot egyik helyről a másikra. Mindkét helyre van pointered.


[link]


ez asszem el is végzi a feladatot

2014. jan. 1. 23:46
Hasznos számodra ez a válasz?
 2/13 A kérdező kommentje:

Igen, ez is jó, csak az a baj vele, hogy ez nem pointerekkel dolgozik, hanem, nos.... nem tudom ilyen TAnyType, nekem hasonló kellene, csak pointerekkel, és copy-val (csak ugye a copy-t stringek-hez használják)


Igazából a lényeg, hogy az adatot amire egy pointer mutat, egy konkrét változóba kéne belepakolnom, az hogy mi a változó típusa, az teljesen mindegy.

2014. jan. 2. 00:10
 3/13 anonim ***** válasza:

"adott egy Pointer típusú Pointer"


Ilyet nem látok, helyette csak egy típustalan pointer-t látok.


"és ezt az adotot kéne egy akármilyen formátumban kibányászni, hogy ideiglenesen tároljam, amíg el nem küldöm Socket-en"


Kibányászni? Minek ideiglenesen eltárolni? Eleve már ott van a memóriában.

Lehet megfelelő típusú operétort is használni így nem kell semmilyen varázslás sem.

A pointer által mutatott objektumot a ^ postfix operátorral érhetjük el.


"Igen, ez is jó, csak az a baj vele, hogy ez nem pointerekkel dolgozik, hanem, nos.... nem tudom ilyen TAnyType, nekem hasonló kellene, csak pointerekkel, és copy-val (csak ugye a copy-t stringek-hez használják) "


Mi van? Move-ről ír és át is lehet másolni vele, de ennek értelmét nem látom ezek alapján.

2014. jan. 2. 01:31
Hasznos számodra ez a válasz?
 4/13 anonim ***** válasza:

Sajtóhiba:

"Lehet megfelelő típusú operétort"

Lehet megfelelő típusú pointert.

2014. jan. 2. 01:32
Hasznos számodra ez a válasz?
 5/13 A kérdező kommentje:

Húha :D látszik nagyon rosszul fogalmazok....


A lényeg a lényeg, hogy a program több thread-ban fut, és ezért bizonytalan az, hogy az aktuális változó ugyan ott, és ugyan az marad, és mivel a socketen való küldés más threadon fut (mert nem akarom összemaszatolni a threadok feladatát) ezért kiatláltam, egy sendlist nevû cuccot, és ha egy másik thredból akarok infókat küldeni, akkor hozzáadom a sendlist-hez és az a megfelelõ threadban küldi. És az egyszerüség kedvért ez -> sendlist.add(data: pointer; size:word; type:byte), ééés ezért kell az adatokat eltárolni, amíg el nem küldi, hogy minden thread menjen szépen a maga rendjében.

2014. jan. 2. 15:35
 6/13 anonim ***** válasza:
Oké, oké, de ezzel nem kerültünk közelebb a pontosításhoz. Miért nem jó a move?
2014. jan. 2. 15:41
Hasznos számodra ez a válasz?
 7/13 A kérdező kommentje:

Mert nem pointer+size kombóból "csinál" változót hanem A változóból "csinál" B változót. Ha pointert adok neki, akkor errort kapok.


"csinál" = belerakja, átrakja, átmásolja, átteszi, copy-za, mozgatja

2014. jan. 2. 15:58
 8/13 anonim ***** válasza:
100%

Írtam hogy a pointer által mutatott objektumot a ^ postfix operátorral érhetjük el.

Látszik azt sem tudod mi az, sőt figyelembe sem veszed.


Nekem sikerült "varázsolni".


procedure varazslas(adat:pointer; adatmeret:word; var cel);

begin

move(adat^,cel,adatmeret);

end;

var

s1,s2:string[30];

i1,i2:integer;

begin

s1:='kutya';

s2:='macska';

writeln(s1,' ',s2);

varazslas(@s1,sizeof(s1),s2);

writeln(s1,' ',s2);

i1:=12233;

i2:=45;

writeln(i1,' ',i2);

varazslas(@i1,sizeof(i1),i2);

writeln(i1,' ',i2);

end.


"sendlist.add(data: pointer; size:word; type:byte),"


A type az egy fenntartott kulcsszó, változó neve nem lehet.


Egy többszálú process belső működése nem triviális (kritikus szekció,szemafor, deadlock csak hogy néhány szót említsek), pointer kezelést nem tudod rendesen ami triviális.

2014. jan. 2. 22:42
Hasznos számodra ez a válasz?
 9/13 A kérdező kommentje:
Köszönöm az építô kritikáidat, igaz, ez még mindig az amit konkrétan keresek, de már jó úton halad. Tem tudom, hogy honnan-mibôl gondolhatod, hogy nagyon triviális dolgokkal dolgozom, vagy hogy nem értek hozzá, a critical(izébizét) tudom, hogy hogyan kell használni, és deadlock-al is találkoztam már, de ha mindenki úgy bújna ki a tojásból, hogy mindent tud kapásból, akkor nem lenne szükség ilyen portálokra ;)
2014. jan. 3. 02:20
 10/13 A kérdező kommentje:

hopika:

még mindig nem az

és

Tem -> nem


u.i.:

tudom, hogy a type levédett, különben még objektumokat sem tudnék kreálni. ( csak a példa kedvéért írtam gyorsan ide valamit, amugy valami packet_type vagy packet_id vagy valami ilyesmi van ott) de szerintem ez jelenleg abszolút mindegy :), és nem hagytam figyelmen kívül a mianeve^ megoldást sem, csak még nem jutottam oda, hogy teszteljem, és addig nem akartam semmit mondani róla, így csak a kérdésre válaszoltam :). És köszi mégegyszer!

2014. jan. 3. 02:34
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!