Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Bytes ocupados por caracter

Estas en el tema de Bytes ocupados por caracter en el foro de C/C++ en Foros del Web. Tengo entendido que el espacio ocupado por una variable de tipo char (o cualquier otro tipo) no es una cantidad fija de bytes, que el ...
  #1 (permalink)  
Antiguo 17/04/2013, 21:43
 
Fecha de Ingreso: noviembre-2006
Mensajes: 166
Antigüedad: 17 años, 5 meses
Puntos: 6
Bytes ocupados por caracter

Tengo entendido que el espacio ocupado por una variable de tipo char (o cualquier otro tipo) no es una cantidad fija de bytes, que el estándar establece un mínimo y un máximo para cada tipo y que la cantidad de espacio asignada a cada tipo varía de una computadora a otra, y también entre compiladores. Esto es lo que indica el libro "Thinking in Cpp".

Pero hace poco me preguntaron si un caracter (así, a secas) ocupa siempre un byte.
Y la verdad es que no estoy seguro

Según los comentarios de la siguiente página, eso es correcto:
http://usando.info/blog/2007/06/bits...-entender.html

Pero en la wikipedia, en este enlace:
http://es.wikipedia.org/wiki/UTF-8
Indica que UTF-8 es un formato de codificación de caracteres... y en sus características indica lo siguiente:
Cita:
El número de bytes depende exclusivamente del código de carácter asignado por Unicode y del número de bytes necesario para representarlo.
Y luego indica que esa cantidad varía entre 1 y 4 bytes.

Luego recordé los operadores a nivel de bit en C++ e hice el siguiente programa (con ayuda de un libro) que convierte cualquier caracter a binario:
Código:
#include <iostream>
using namespace std;

int main()
{
    char c;
    cout<<"Ingrese un caracter: ";
    cin>>c;
    cout<<"\'"<<c<<"\' en binario: ";
    for(short i=7; i>=0; --i)
        if( c & (1<<i) )
            cout<<1;
        else cout<<0;
    return 0;
}
Sin embargo, esto no tiene nada que ver con el espacio de almacenamiento que ocupa un caracter (o eso creo)
Es que el programa toma el caracter y al mostrarlo en binario, muestra convertido a binario su código correspondiente en ASCII.
Por ejemplo, si ingreso el caracter 1, va a mostrar 49 en binario (y eso no tiene nada que ver me parece).

Gracias de antemano.
  #2 (permalink)  
Antiguo 18/04/2013, 01:35
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 meses
Puntos: 73
Respuesta: Bytes ocupados por caracter

El código ASCII de un carácter es, por decirlo de algún modo, el número de orden que tiene asignado en la lista. Así, el código ASCII del "1" (como carácter de máquina de escribir, no como su valor matemático) es el número 49, igual que al "0" le corresponde el 48 y a la "A" le corresponde el 65. Tu programa te da el código del carácter, no su valor numérico.

En cuanto al formato UTF-8, ese enlace que indicas ya te indica cómo está estructurado. Lo que ocurre es que el tipo char de C/C++ utiliza el código ASCII. Para otros formatos, necesitarás otros tipos. Por ejemplo, para Unicode necesitarás un tipo wchar (16 bits). También necesitarás, probablemente, nuevas especificaciones de formato o versiones especiales de las funciones del grupo printf/scanf/cin/cout. Tendrás que consultar en los manuales de tu compilador cuáles son estos tipos y qué funciones y/o especificaciones de formato necesitas para manejarlos.
  #3 (permalink)  
Antiguo 23/04/2013, 19:55
 
Fecha de Ingreso: noviembre-2006
Mensajes: 166
Antigüedad: 17 años, 5 meses
Puntos: 6
Respuesta: Bytes ocupados por caracter

En términos generales, no se puede afirmar que un caracter ocupa un byte, ¿es así?
  #4 (permalink)  
Antiguo 25/04/2013, 02:59
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 meses
Puntos: 73
Respuesta: Bytes ocupados por caracter

No, ahora ya no. Ocupará 1 byte si se trata de código ASCII, que es suficiente para cubrir los alfabetos occidentales (inglés, español, francés, etc), que, básicamente, se diferencian en algunas letras y símbolos de puntuación, aunque puede haber alguna diferencia en los códigos del 128 al 255. Ahora, en cuanto necesitas también otros alfabetos (Europa del Este, griego, alfabetos cirílicos, árabe, hebreo, alfabetos asiáticos, ...) ya necesitas más bytes por carácter, no es suficiente con los 255 que proporcionan los 8 bits del código ASCII. Supongo que el código ASCII quedará como un subconjunto de estos formatos extendidos.

Etiquetas: int, programa, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:05.