PDA

Visualizza versione completa : byte di un carattere


karmo
21-02-2006, 10.19.03
ciao a tutti!
mi stavo chiedendo una cosa:
se un numero puo' essere rappresentato con 32 o 16 bit,x una lettera quanti bit vengono utilizzati? 8? cioè un byte per ogni carattere?
se abbiamo la parola "ciao" allora abbiamo 4 byte usati per la rappresentazione?

Gergio
21-02-2006, 10.31.41
Prova a guardare la prima tabella di qsta pagina:
http://www.in-f-or.it/informatica/c/cap27.html
Si parla di linguaggio C, ma e' una cosa che dovrebbe essere comune anche ad altri linguaggi di programmazione. Per qnto riguarda la parola "ciao", dipende come e' rappresentata. Mi spiego (ci provo :p): in c potresti metterla in un array di caratteri (e allora ti occuperebbe 4 byte, come hai giustamente detto) o in una stringa, che e' un array di caratteri che termina con un carattere speciale (\0), per cui ti va a occupare 5 byte.
Se vuoi una panoramica piu' chiara sulle stringhe in C, ti consiglio di leggere qsto: http://www.beta.it/beta/bs019598/0296/b296arp2.htm (sotto alla storia del televisore, che cmq potresti leggere: male nn fa ;))

karmo
21-02-2006, 12.44.23
scusami!volevo proprio il chiarimento in ambito c!:)
lo chiedo perchè in un esercizio client server che sto implementando, la funzione send mi chiede in ingresso la dimensione in bytes del buffer, che nel mio caso è un buffer di caratteri!
quindi faccio sizeof(buffer)! ma non è giusto!perchè dall altra parte, quella server, non mi legge 4 bytes ma 2 o 3!e la stringa passata non la legge neanche!! se scrivo "ciao" il server riceve "ca" con un sorrisino finale(incredibile!!ehehe), credo sia per un errore di codifica ascii o per un errore di chissà che!
cmq se metto strlen(buffer) al posto di sizeof(buffer) allora tutto funziona a meraviglia!!:)
allora è li che mi son detto:"vuoi vedere che ogni carattere è rappresentato con un byte?" :D

Sergio Neddi
21-02-2006, 13.40.51
Sono molte le codifiche dei caratteri, una comune è il formato UNICODE, che sono codici a 2 caratteri.

quipo.it
21-02-2006, 14.25.36
Originariamente inviato da Sergio Neddi Sono molte le codifiche dei caratteri, una comune è il formato UNICODE, che sono codici a 2 caratteri.

non è esatto. Unicode definisce tre formati, UTF-8, UTF-16 e UTF-32, che hanno codici rispettivamente da 8, 16 e 32 bit ciascuno.

http://www.unicode.org/standard/principles.html

LoryOne
21-02-2006, 15.52.40
#include <stdio.h>
#include <conio.h>
#include <string.h>

main(void){
char c[]="0123456789";
char *d="0123456789";

printf("stringa c:%s\nsizeof:%i\nstrlen:%i\n\n",
c,sizeof(c),strlen(c));
printf("stringa d:%s\nsizeof:%i\nstrlen:%i\n",
d,sizeof(d),strlen(d));
getch();
}

Sergio Neddi
22-02-2006, 23.44.27
Originariamente inviato da quipo.it


non è esatto. Unicode definisce tre formati, UTF-8, UTF-16 e UTF-32, che hanno codici rispettivamente da 8, 16 e 32 bit ciascuno.

http://www.unicode.org/standard/principles.html

Yes, però, come dicevo, quello comune è di 2 caratteri.

Dr_House
24-02-2006, 16.52.39
Tornando al problema del Send sul buffer, hai fatto in modo che la receve andasse a prendere quei dati?

Insomma, se stai usando gli scambi di messaggi potrebbero esserci degli errori di sincronizzazione tra le send e le receve, in questo caso devi fare nel server delle receve bloccanti.

Una volta fatto questo devi usare un buffer identico per tutte e due.

e poi quando invi i char sul buffer devi inserire se non erro anche il carattere di terminazione :)