if broken it is, fix it you should
char * sBuffer;
//init van sBuffer
*sBuffer <<=1; //waarde keer 2
sBuffer++;
etc
/me weet geen leuke quote voor in zijn signature
[ Voor 78% gewijzigd door Rowwan op 06-02-2003 12:44 ]
if broken it is, fix it you should
/me weet geen leuke quote voor in zijn signature
Verwijderd
(BITWISE-AND <integer> <integer>) => <integer>
(BITWISE-IOR <integer> <integer>) => <integer>
(BITWISE-XOR <integer> <integer>) => <integer>
Snap je wat ik bedoel?
Verwijderd
Gewoon met blokhaken, dat mag gewoon op pointers hoor!!:elgringo schreef op 06 February 2003 @ 12:30:
En als je bijvoorbeeld het 2de karakter van een char* wilt hebben dan?
1
2
| char *sBuffer = "abcdefg"; sBuffer[1] <<= 1; |
1
| *buffer=*buffer>>2; |
Maar dit doet niets. Wat is er fout?
if broken it is, fix it you should
Staat de pointer wel naar de goeie plek te wijzen?
/me weet geen leuke quote voor in zijn signature
Verwijderd
Ik ben een sector van de hd aan het lezen (512 byte)
definitie buffer:
1
| char* buffer = (char*)malloc (512*numberofsectors); |
lezen van sector (grote=512):
1
| if (!ReadFile (hDevice, buffer, grote, &bytesread, NULL) ) |
Deze buffer wordt op het scherm gekwakt. Nu wil ik de laatste 2 bytes weg hebben (en de eerste 464, zodat ik alleen de partition entries overhoud)
1
| *buffer <<= 2; |
En dan blijft het resultaat hetzelfde (dus met of zonder shift maakt voor het resultaat nix uit)
if broken it is, fix it you should
Verwijderd
Begrijp je wel wat je doet (en wilt)?elgringo schreef op 06 februari 2003 @ 13:26:
Uitleg:
Ik ben een sector van de hd aan het lezen (512 byte)
definitie buffer:
C++:
1 char* buffer = (char*)malloc (512*numberofsectors);
lezen van sector (grote=512):
C++:
1 if (!ReadFile (hDevice, buffer, grote, &bytesread, NULL) )
Deze buffer wordt op het scherm gekwakt. Nu wil ik de laatste 2 bytes weg hebben (en de eerste 464, zodat ik alleen de partition entries overhoud)
C++:
1 *buffer <<= 2;
En dan blijft het resultaat hetzelfde (dus met of zonder shift maakt voor het resultaat nix uit)
Ten eerste veranderen van de pointer buffer laat geen data verdwijnen, wat jij wilt is de pointer buffer verplaatsen naar zn nieuwe plek, dus buffer+=464 en daarna de debetreffende bytes uitlezen.
/me weet geen leuke quote voor in zijn signature
waarom was de vraag of ik er eerst een char[] van moest maken, maar dit was niet nodig volgens bepaalde iemandenVerwijderd schreef op 06 February 2003 @ 13:30:
[...]
Begrijp je wel wat je doet (en wilt)?
Ten eerste veranderen van de pointer buffer laat geen data verdwijnen, wat jij wilt is de pointer buffer verplaatsen naar zn nieuwe plek, dus buffer+=464 en daarna de debetreffende bytes uitlezen.
if broken it is, fix it you should
Verwijderd
Of je er een char[] van maakt of je werkt met de buffer pointer, maakt niet zoveel uit, is een implementatie.elgringo schreef op 06 februari 2003 @ 13:32:
[...]
waarom was de vraag of ik er eerst een char[] van moest maken, maar dit was niet nodig volgens bepaalde iemanden
Stel je maakt er een char[] van, dan kun je meteen de waardes uitlezen buffer[463], buffer[464], etc.
Bij zoiets is het vaak handig om een tekening te maken van wat je eigenlijk doet.
Verduidelijking voor jou:
char *buffer
*buffer is dan een char en buffer is de verwijzing naar een char.
[ Voor 11% gewijzigd door Verwijderd op 06-02-2003 13:39 . Reden: de r zat er niet in, wel in de maand, nog 2 nachtjes ]
Verwijderd
En da bijvoorbeeld
1
| char* part_entry = &buffer[464]; |
(Dan wijst de pointer "part_entry" precies naar offset 464, oftewel het 465-ste byte.)
Maar waarom gebruik je in hemelsnaam geen structs, want een partitietabel heeft een voorgedefineerd formaat, dat is toch veel handiger?! Ik weet wel dat ik jou liever niet met mijn HD's laat rommelen...
[ Voor 89% gewijzigd door Verwijderd op 06-02-2003 13:47 ]
je kan alleen per 512 lezenVerwijderd schreef op 06 februari 2003 @ 13:38:
Waarom zet je "grote" niet gewoon op 510![]()
En da bijvoorbeeldC++:
1 char* part_entry = &buffer[464];
(Dan wijst de pointer "part_entry" precies naar offset 464, oftewel het 465-ste byte.)
Maar waarom gebruik je in hemelsnaam geen structs, want een partitietabel heeft een voorgedefineerd formaat, dat is toch veel handiger?! Ik weet wel dat ik jou liever niet met mijn HD's laat rommelen...
en als ik jouw code gebruik dan begint hij niet met het 465ste byte met lezen maar iets heel anders (wat ik niet terug kan vinden)
[ Voor 14% gewijzigd door elgringo op 06-02-2003 14:16 ]
if broken it is, fix it you should
Verwijderd
Als de code goed is, dan zou part_entry moeten verwijzen naar de 465e byte en zou part_entry[0] de 1e byte moeten zijn (vanaf byte 465)elgringo schreef op 06 February 2003 @ 14:13:
[...]
je kan alleen per 512 lezen
en als ik jouw code gebruik dan begint hij niet met het 465ste byte met lezen maar iets heel anders (wat ik niet terug kan vinden)
[ Voor 3% gewijzigd door Verwijderd op 06-02-2003 14:22 ]
Verwijderd
Misschien dat je iets hebt aan dit door mij in elkaar geflantste stuk code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| typedef struct __attribute__((packed)) { char state; char first_head; short first_cylsect; char type; char end_head; short end_cylsect; long sector_offset; long total_sectors; } PART_ENTRY; typedef struct __attribute__((packed)) { char bootloader[446]; PART_ENTRY partitions[4]; char signature[2]; } MBR_RECORD; int main () { MBR_RECORD record; /* Assertions validity: */ assert(sizeof(PART_ENTRY) == 16); assert(sizeof(record) == 512); /* Lets read the MBR record: */ if (!ReadFile (hDevice, &record, sizeof(record), &bytesread, NULL) ) /* etc... */ |
sssssssssst. nou verpest je het voor ons allemaalSoultaker schreef op 07 February 2003 @ 17:44:
Ik denk dat je je nog eens goed achter de oren moet krabben, als je met partition tables en master boot records gaat spelen, maar geen idee hebt wat een array in C/C++ is (of wat voor operaties je er op kunt toepassen). Maar goed, laat mij je lol niet verpesten. Ik kan je echter wel aanraden om niets terug te schrijven tot je een heel goed idee hebt waar je mee bezig bent.
Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua
if broken it is, fix it you should
Verwijderd
(memcpy anyone..?)