"Standard C defines three 'character' types - char, signed char, and unsigned char. All of these types must be able to represent all the characters in the execution character set. All are representet by at least eight bits."
De datatyper vi kender i C er som regel specificeret som "mindst X bit" - og heldigt for os, for ellers ville vi nok være bundet fast til en 16-bit integer...
Så svaret er nej, der findes ikke en type, der hedder byte i C. Men du kan jo godt bruge en integer til at repræsentere tingene i. Og en byte er osse sådan en kedelig størrelse, 1 byte. Der er ikke nogen maskiner, der kan addressere kun 1 byte. De bruger et "ord", hvilket for de fleste maskiner i dag er 32 bit. At addressere mindre pr. access ville give et alvorligt performance-hit. Brug en integer og mask eventuelt det overskydende ud...
så godt som alle computere idag adresserer bytes (hver byte har sin egen adresse). Men mange computere vælger at hente mere end en byte ad gangen af performance hensyn.
Hvis man går lidt tilbage i tiden, så kan man godt finde computere, hvor man decideret adresserede ord og ikke bytes.
dittmer >> nu er det jo ikke sikkert at han kun skal tildele en værdi til én variabel, men måske fx læse data ind i et array. Så ville det ikke give mening med en int...
OK, tak for hjælpen indtil nu, men det løser ikke heæt mit problem. Grunden til at spørger er at jeg skal gemme et billede i en i en buffer i C Billedet ser således ud hvis man bare lister det: -------------------------------------------------------------------- GIF89aX▼ã öà GØ6d«T|║▀µ‗¯¯¯LLL«««ØØØ¥¥¥▒├ÓíÀ┘ƽË,,,}}}∟∟∟¯‗°!Uª┴¤µììì
Sådan som jeg gør nu er #define BUFLEN 32768 /* maximum response size */
char buffer[BUFLEN+1]; /* buffer server answer */ char* ptr; /* pointer into the buffer */ ptr = response;
Derefter laver jeg en read til ptr;
problemet liger i at jeg kun for "GIF89aX" over i min buffer. Jeg troede derfor at jeg ikke kunne gemme "mærkelige" tegn i en char. Er det så ikke korrekt og hvad kan jeg ellers gøre. Jeg ved godt at det måske er et lidt andet spørgsmål en jeg startede med at stille, men jeg skal nok sætte pointene op eller oprette et nyt spørgsmål hvis det behøves.
arne> Det er rigtigt, at der kan adresseres i bytes, men der hentes stadig et ord ad gangen. Der er derfor ikke nogen performancemæssig (mht. overførsel) grund til at bruge byte.
jpk> Du kan jo kalde din nye type hvad som helst, men en gylden regel er, at du ikke skal kalde den noget, den ikke er (ok, det var lidt flabet, men jeg tror, det går... ;o). Jeg ved godt, at en BYTE og en byte ikke er det samme, men de minder da en del om hinanden i navnet, ikke?
Jeg glemte at sige i citatet ovenfor, at det var fra Plaugers bog om standard-C-biblioteket. Du "risikerer" derfor at stå med en BYTE, som faktisk fylder 16 bits (hvilket vil overraske mange) på et system, der benytter Unicode. Bevares, en byte er ikke oprindeligt defineret som otte bit. Det er (oprindeligt) defineret som den mindste enhed, der kan adresseres på maskinen, og har gennem tiderne været både sekd, syv og otte bit. Den nuværende brug af ordet beror på en antagelse om at en byte indeholder otte bit.
Det er bare ret sjældent efterhånden, det er nødvendigt at spekulere på om et tegn ligger i 8 eller 16 bit, og som oftest er det netop sådanne antagelser, der giver anledning til de store fejl og in-portabilitet... Derfor er det altid min anbefaling til programmørerne, at de holder sig til typer, der ikke forventes at være af en specifik størrelse...
Det virkede med en unsigned char buffer[] så længe det er arrayet og ikke en pointer til arrayet til tilføjet til min recv(socket_descriptor, buffer, buffer_size);
Tak for hjælpen
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.